Karbust Posted May 28, 2016 at 04:10 PM Share Posted May 28, 2016 at 04:10 PM Boas pessoal Venho aqui postar o meu mais recente trabalho de avaliação para a aula de linguagens de programação #include <stdio.h> #include <conio.h> #include <string.h> struct trabalhador { int id_trabalhador; char nome[50]; int idade; char morada[30]; float salario_bruto; float percentagem_irs; float percentagem_tsu; char departamento[50]; float valor_irs; float valor_tsu; float salario_liquido; }; #define num_trabalhadores 100 struct trabalhador x[num_trabalhadores]; alterar_struct(int id_trab) { printf("%d\n\n", id_trab); int idade2; float salario_bruto2, salario_liquido2, percentagem_irs2, percentagem_tsu2, valor_tsu2, valor_irs2; char nome2[50], morada2[30], departamento2[50]; printf("ATENCAO: Quando pretender manter o valor anterior introduza 0!\n\n"); //------------------------------------------------------------------------------------------------- printf("Introduza o um novo nome para o trabalhador %d: ", id_trab); scanf(" %s", &nome2); //printf("%s\n", nome2); if(nome2 == "0") { return; } else { strcpy((x+(id_trab-1))->nome,nome2); } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova idade para o trabalhador %d: ", id_trab); scanf("%d", &idade2); if(idade2 == 0) { return; } else { (x+(id_trab-1))->idade = idade2; } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova morada para o trabalhador %d: ", id_trab); scanf(" %s", &morada2); if(morada2 == "0") { return; } else { strcpy((x+(id_trab-1))->morada,morada2); } //------------------------------------------------------------------------------------------------- printf("Introduza um novo departamento para o trabalhador %d: ", id_trab); scanf(" %s", &departamento2); if(departamento2 == "0") { return; } else { strcpy((x+(id_trab-1))->departamento,departamento2); } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova percentagem de IRS para o trabalhador %d (ex: 10%c = 0.10): ", id_trab); scanf("%f", &percentagem_irs2); if(percentagem_irs2 == 0) { return; } else { (x+(id_trab-1))->percentagem_irs = percentagem_irs2; } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova percentagem de TSU para o trabalhador %d (ex: 10%c = 0.10): ", id_trab); scanf("%f", &percentagem_tsu2); if(percentagem_tsu2 == 0) { return; } else { (x+(id_trab-1))->percentagem_tsu = percentagem_tsu2; } //------------------------------------------------------------------------------------------------- printf("Introduza um novo salario bruto para o trabalhador %d: ", id_trab); scanf("%f", &salario_bruto2); if(salario_bruto2 == 0) { return; } else { (x+(id_trab-1))->salario_bruto = salario_bruto2; (x+(id_trab-1))->valor_irs = (x+(id_trab-1))->salario_bruto * (x+(id_trab-1))->percentagem_irs; (x+(id_trab-1))->valor_tsu = (x+(id_trab-1))->salario_bruto * (x+(id_trab-1))->percentagem_tsu; (x+(id_trab-1))->salario_liquido = (x+(id_trab-1))->salario_bruto - ((x+(id_trab-1))->valor_irs + (x+(id_trab-1))->valor_tsu); } //------------------------------------------------------------------------------------------------- printf("Trabalhador %d editado com sucesso!", id_trab); } eliminar_dado(int id) { strcpy((x+(id-1))->nome,""); (x+(id-1))->idade = 0; strcpy((x+(id-1))->morada,""); (x+(id-1))->salario_bruto = 0; (x+(id-1))->percentagem_irs = 0; (x+(id-1))->percentagem_tsu = 0; strcpy((x+(id-1))->departamento,""); (x+(id-1))->valor_irs = 0; (x+(id-1))->valor_tsu = 0; (x+(id-1))->salario_liquido = 0; (x+(id-1))->id_trabalhador = 0; } main() { int opcao, op, id, num_dados; int i; do { printf("Menu:\n"); printf("1 - Inserir dados\n"); printf("2 - Listagem geral dos dados\n"); printf("3 - Consultar dados e alterar dados\n"); printf("4 - Alterar dados\n"); printf("5 - Eliminar dado\n"); printf("6 - Sair\n"); printf("Insira o numero da opcao: "); scanf("%d",&opcao); printf("\n"); switch(opcao) { case 1: printf("Quantos dados pretende inserir? "); scanf("%d",&num_dados); if(num_dados <= 0 || num_dados > num_trabalhadores) { printf("So pode inserir valores entre 1 e %d", num_trabalhadores); } else { for(i=0; i < num_dados; i++) { int id_trabalhador_antes; int *id_trabalhador_antes_ponteiro; printf("\nInsira o id do trabalhador %d: ", i+1); scanf("%d",&id_trabalhador_antes); id_trabalhador_antes_ponteiro = id_trabalhador_antes; if(id_trabalhador_antes_ponteiro <= 0) { printf("Os valores tem de ser maiores que 0."); getch(); break; } int i2; for(i2=0; i2 < num_trabalhadores; i2++) { if((x+i2)->id_trabalhador == id_trabalhador_antes_ponteiro) { printf("Ja existe um trabalhador com esse id!"); getch(); system("cls"); main(); } else { (x+i)->id_trabalhador=id_trabalhador_antes_ponteiro; } } printf("Insira o nome do trabalhador %d: ", i+1); //scanf(" %s",&x.nome); scanf("%s",&(x+i)->nome); printf("Insira a idade do trabalhador %d: ", i+1); scanf("%d",&(x+i)->idade); printf("Insira a morada do trabalhador %d: ", i+1); scanf("%s",&(x+i)->morada); printf("Insira o salario bruto do trabalhador %d: ", i+1); scanf("%f",&(x+i)->salario_bruto); printf("Insira a percentagem de IRS do trabalhador %d (ex: 10%c = 0.10): ", i+1, 37); scanf("%f",&(x+i)->percentagem_irs); printf("Insira a percentagem de TSU do trabalhador %d (ex: 10%c = 0.10): ", i+1, 37); scanf("%f",&(x+i)->percentagem_tsu); printf("Insira o nome do departamento do trabalhador %d: ", i+1); scanf("%s", &(x+i)->departamento); (x+i)->valor_irs = (x+i)->salario_bruto * (x+i)->percentagem_irs; (x+i)->valor_tsu = (x+i)->salario_bruto * (x+i)->percentagem_tsu; (x+i)->salario_liquido = (x+i)->salario_bruto - ((x+i)->valor_irs + (x+i)->valor_tsu); system("cls"); } } break; case 2: if(num_dados <= 10) { for(i=0; i < num_dados; i++) { printf("ID Trabalhador: %d\n", (x+i)->id_trabalhador); printf("Nome: %s\n", (x+i)->nome); printf("Idade: %d\n", (x+i)->idade); printf("Morada: %s\n", (x+i)->morada); printf("Departamento: %s\n", (x+i)->departamento); printf("Salario Bruto: %.2f\n", (x+i)->salario_bruto); printf("Percentagem IRS: %.2f\n", (x+i)->percentagem_irs); printf("Percentagem TSU: %.2f\n", (x+i)->percentagem_tsu); printf("Valor IRS: %.2f\n", (x+i)->valor_irs); printf("Valor TSU: %.2f\n", (x+i)->valor_tsu); printf("Salario Liquido: %.2f\n\n", (x+i)->salario_liquido); } } else if(num_dados > 10) { for(i=0; i < num_dados; i++) { if(i % 10 == 0) { getch(); } printf("ID Trabalhador: %d\n", (x+i)->id_trabalhador+1); printf("Nome: %s\n", (x+i)->nome); printf("Idade: %d\n", (x+i)->idade); printf("Morada: %s\n", (x+i)->morada); printf("Departamento: %s\n", (x+i)->departamento); printf("Salario Bruto: %.2f\n", (x+i)->salario_bruto); printf("Percentagem IRS: %.2f\n", (x+i)->percentagem_irs); printf("Percentagem TSU: %.2f\n", (x+i)->percentagem_tsu); printf("Valor IRS: %.2f\n", (x+i)->valor_irs); printf("Valor TSU: %.2f\n", (x+i)->valor_tsu); printf("Salario Liquido: %.2f\n\n", (x+i)->salario_liquido); } } getch(); system("cls"); break; case 3: printf("Introduza o id de trabalhador que pretende visualizar: "); scanf("%d",&id); printf("ID Trabalhador: %d\n", (x+(id-1))->id_trabalhador); printf("Nome: %s\n", (x+(id-1))->nome); printf("Idade: %d\n",(x+(id-1))->idade); printf("Morada: %s\n", (x+(id-1))->morada); printf("Departamento: %s\n", (x+(id-1))->departamento); printf("Salario Bruto: %.2f\n", (x+(id-1))->salario_bruto); printf("Percentagem IRS: %.2f\n", (x+(id-1))->percentagem_irs); printf("Percentagem TSU: %.2f\n", (x+(id-1))->percentagem_tsu); printf("Valor IRS: %.2f\n", (x+(id-1))->valor_irs); printf("Valor TSU: %.2f\n", (x+(id-1))->valor_tsu); printf("Salario Liquido: %.2f\n\n", (x+(id-1))->salario_liquido); getch(); printf("Pretende editar os dados do trabalhador?\n"); printf("1 - Sim\n"); printf("2 - Nao\n"); scanf("%d",&op); if(op == 1) { alterar_struct(id); } else if (op == 2) { system("cls"); } else { printf("Opcao Invalida!"); } break; case 4: printf("Introduza o id de trabalhador que pretende alterar: "); scanf("%d",&id); alterar_struct(id); system("cls"); break; case 5: printf("Introduza o id de trabalhador que pretende remover: "); scanf("%d",&id); eliminar_dado(id); getch(); system("cls"); break; case 6: exit(0); break; } } while(opcao != 6); } Link no Pastebin http://pastebin.com/FakrKAut Qualquer dúvida, digam Abraço Link to comment
PACI Posted May 28, 2016 at 06:35 PM Share Posted May 28, 2016 at 06:35 PM Só um tip: quando um if (ao ser true ou false) só chama uma função, não precisas de usar as chavetas. Ex: if (cond) return; Link to comment
Karbust Posted May 28, 2016 at 06:36 PM Author Share Posted May 28, 2016 at 06:36 PM Só um tip: quando um if (ao ser true ou false) só chama uma função, não precisas de usar as chavetas. Ex: if (cond) return; Eu sei, mas estou mais habituado assim, é uma questão de organização para mim... Mas obrigado pela dica Link to comment
Berhart Posted May 28, 2016 at 08:56 PM Share Posted May 28, 2016 at 08:56 PM Gostei da iniciativa e do teu trabalho :megusta: . Talvez também tome a liberdade de postar o meu trabalho de projeto sobre exatamente o mesmo tema. Link to comment
Karbust Posted May 28, 2016 at 10:26 PM Author Share Posted May 28, 2016 at 10:26 PM Era para fazer um para gestão de alunos, mas como já tinha esse feito para uns módulo anterior, adicionei a estrutura e os ponteiros... Link to comment
Berhart Posted May 29, 2016 at 09:55 AM Share Posted May 29, 2016 at 09:55 AM Visto que no teu trabalho implementaste estruturas e ponteiros não podias ter brincado com Malloc's e Free's ? Por exemplo em vez de declarares o teu vetor principal onde metes toda a informação: x[num_trabalhadores] podias ter feito já em notação de ponteiros *x e depois farias talvez uma função de inicialização do teu vetor para lhe dar os bytes necessários através do malloc. Aspeto/sugestão: Penso eu(ainda não sou pro na àrea xD) que normalmente quando usas estruturas tens de encapsular a tua informação ao máximo para o utilizador não saber o que andas a fazer por exemplo: Criares Operações Básicas para a tua estrutura e.g: Função que Remove/Adiciona/Procura um trabalhador ou quem sabe uma Função que ordene o teu vetor por ordem alfabética do departamento num ficheiro à parte que depois compilavas e juntava tudo. Por fim resta-me dizer que existem estruturas melhores que vetores para o teu programa ser mais eficiente por exemplo em termos de procura de um certo elemento que o utilizador queira como: Listas Simplesmente/Duplamente Ligadas, HashTables e Arvores(AVL, Binária, RedBlack). PS: Eu dei estas sugestões mas não sei qual era o objetivo do teu trabalho ao certo, de qualquer forma mais uma vez gostei da tua partilha dado que implementaste pequenas coisas que eu não sabia como a inclusão da biblioteca <conio.h> e de alguns comandos como: getch() e o system(). Link to comment
Karbust Posted May 29, 2016 at 10:21 AM Author Share Posted May 29, 2016 at 10:21 AM Visto que no teu trabalho implementaste estruturas e ponteiros não podias ter brincado com Malloc's e Free's ? Por exemplo em vez de declarares o teu vetor principal onde metes toda a informação: x[num_trabalhadores] podias ter feito já em notação de ponteiros *x e depois farias talvez uma função de inicialização do teu vetor para lhe dar os bytes necessários através do malloc. Aspeto/sugestão: Penso eu(ainda não sou pro na àrea xD) que normalmente quando usas estruturas tens de encapsular a tua informação ao máximo para o utilizador não saber o que andas a fazer por exemplo: Criares Operações Básicas para a tua estrutura e.g: Função que Remove/Adiciona/Procura um trabalhador ou quem sabe uma Função que ordene o teu vetor por ordem alfabética do departamento num ficheiro à parte que depois compilavas e juntava tudo. Por fim resta-me dizer que existem estruturas melhores que vetores para o teu programa ser mais eficiente por exemplo em termos de procura de um certo elemento que o utilizador queira como: Listas Simplesmente/Duplamente Ligadas, HashTables e Arvores(AVL, Binária, RedBlack). PS: Eu dei estas sugestões mas não sei qual era o objetivo do teu trabalho ao certo, de qualquer forma mais uma vez gostei da tua partilha dado que implementaste pequenas coisas que eu não sabia como a inclusão da biblioteca <conio.h> e de alguns comandos como: getch() e o system(). O objetivo do meu trabalho era englobar a matéria dada até ao módulo em que estou (6 ou 7 acho eu >.<), e foi isso que fiz, a função malloc e os free's ainda não dei, e essas listas de que aí falaste não sei o que são >.< Na biblioteca conio.h só a uso para a função getch(), que faz o mesmo que return 0; acho eu, apenas serve para parar o programa para se poder ver o output, e quando se quer continua basta clicar numa tecla qualquer... Essa de ordenar por ordem alfabética nem me lembrei, talvez venha a fazer num próximo trabalho, acho que agora vamos dar ficheiros, posso até fazer um import de um ficheiro txt fazendo de base de dados, guardando depois na estrutura para a execução e talvez possa ordenar por ordem alfabética no ficheiro... Link to comment
Berhart Posted May 29, 2016 at 10:39 AM Share Posted May 29, 2016 at 10:39 AM O meu segundo projeto de algoritmos foi fazer um programa que tendo só 4-5 comandos era fazer um buffer de hashtags como o twitter faz. Por exemplo recebendo frases tem de selecionar só as hashtags e fazer algo com elas. O problema do projeto é sobretudo eficiência e não a dificuldade em si. Se nos for dado mais de 1kk de hashtags convém que a coisa corra rápido e que não use muita memória Link to comment
Karbust Posted May 29, 2016 at 10:40 AM Author Share Posted May 29, 2016 at 10:40 AM O meu segundo projeto de algoritmos foi fazer um programa que tendo só 4-5 comandos era fazer um buffer de hashtags como o twitter faz. Por exemplo recebendo frases tem de selecionar só as hashtags e fazer algo com elas. O problema do projeto é sobretudo eficiência e não a dificuldade em si. Se nos for dado mais de 1kk de hashtags convém que a coisa corra rápido e que não use muita memória O meu professor não quer avançar muito no C, ele diz que esta linguagem já não é usada por nenhuma empresa... Ele está à espera que instalem o Visual Studio nos pc's da escola para começar com o C# Link to comment
Berhart Posted May 29, 2016 at 11:32 AM Share Posted May 29, 2016 at 11:32 AM Pois isso tem a ver com cada escola xD Eu faço o que me pedem e pronto, vivemos felizes para sempre. Mas é certo que se começares com C vais saber trabalhar melhor com C++ e C#, porque convém começares no mais básico e depois é só aprenderes os pormenores das outras linguagens que advêm do C Link to comment
Karbust Posted May 29, 2016 at 11:57 AM Author Share Posted May 29, 2016 at 11:57 AM Não acho nada C# parecido com C, já C++ tem as suas parecenças Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now