tonelol1 Posted April 30, 2012 at 11:50 AM Report #452239 Posted April 30, 2012 at 11:50 AM Boas. O erro está assinalado no código ( AQUI!!! ). Não estou a conseguir resolver este problema. Por alguma razão os arrays nao contem valor nenhum( NULL ) #include <stdio.h> #include <stdlib.h> #include <string.h> #define maximo 5 //variavel global int code=0; typedef struct candidato { int codigo; char* titulo; char* instituicao; char* investigador; int duracao; char* palavras_chave; } candidato, *projeto; projeto array_projetos [maximo]; typedef struct gastos { int equipamentos; int bolsas; int consumiveis; int consultores; int deslocacoes; int gastos_gerais; }gastos, * financiamento; financiamento array_financiamentos[maximo]; typedef struct notas { int originalidade; int qualidade; int idoneidade; int exequibilidade; }notas, *avaliacao; void criar_projeto() { char titulo[50]; char instituicao[50]; char investigador[50]; int duracao; char palavras_chave[50]; int equipamentos; int bolsas; int consumiveis; int consultores; int num; int j; printf("Introduza o titulo: "); gets(titulo); printf("\nIntroduza a instuituicao proponente: "); gets(instituicao); printf("\nIntroduza o nome do investigador responsavel: "); gets(investigador); printf("\nIntroduza a duracao do projecto(em anos): "); scanf("%d",&duracao); printf("Introduza o numero de palavras chave que deseja: "); scanf("%d",&num); if (num==0) { } if (num==1) { printf("\nIntroduza a palavra chave: "); for ( j=0;j<1;j++) { scanf("%s",&palavras_chave[j]); } } if (num==2) { printf("\nIntroduza a palavra chave: "); for ( j=0;j<2;j++) { scanf("%s",&palavras_chave[j]); } } if (num==3) { printf("\nIntroduza a palavra chave: "); for ( j=0;j<3;j++) { scanf("%s",&palavras_chave[j]); } } if (num==4) { printf("\nIntroduza a palavra chave: "); for ( j=0;j<4;j++) { scanf("%s",&palavras_chave[j]); } } if (num==5) { printf("\nIntroduza a palavra chave: "); for ( j=0;j<5;j++) { scanf("%s",&palavras_chave[j]); } }code++; } int soma_gastos ( int equipamentos,int bolsas,int consumiveis,int consultores,int deslocacoes,int gastos_gerais) { int soma; printf("\nIntroduza o valor para os gastos em compra de equipamento: "); scanf("%d",&equipamentos); printf("\nIntroduza o valor para os gastos na bolsa: "); scanf("%d",&bolsas); printf("\nIntroduza o valor para os gastos com consumiveis: "); scanf("%d",&consumiveis); printf("\nIntroduza o valor para os gastos com consultores: "); scanf("%d",&consultores); printf("\nIntroduza o valor para os gastos com deslocacoes: "); scanf("%d",&deslocacoes); printf("\nIntroduza o valor para os gastos gerais: "); scanf("%d",&gastos_gerais); soma=equipamentos+bolsas+consumiveis+consultores+deslocacoes+gastos_gerais; return soma; } int notas_avaliacao ( int originalidade1,int qualidade1,int idoneidade1,int exequibilidade1,int originalidade2,int qualidade2,int idoneidade2,int exequibilidade2,int originalidade3,int qualidade3,int idoneidade3,int exequibilidade3) { int k; int media1,media2,media3; for( k = 0 ; k<3 ; k++) { printf("\nIntroduza qual e o seu numero de avaliador: "); scanf("%d",&k); if ( k = 0) { printf("\nIntroduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&originalidade1); printf("\nIntroduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&qualidade1); printf("\nIntroduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&idoneidade1); printf("\nIntroduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&exequibilidade1); media1=(originalidade1+qualidade1+idoneidade1+exequibilidade1)/4; return media1; } else if ( k=1) { printf("\nIntroduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&originalidade2); printf("\nIntroduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&qualidade2); printf("\nIntroduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&idoneidade2); printf("\nIntroduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&exequibilidade2); media2=(originalidade2+qualidade2+idoneidade2+exequibilidade2)/4; return media2; } else if (k=2) { printf("\nIntroduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&originalidade3); printf("\nIntroduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&qualidade3); printf("\nIntroduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&idoneidade3); printf("\nIntroduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: "); scanf("%d",&exequibilidade3); media3 =(originalidade3+qualidade3+idoneidade3+exequibilidade3)/4; return media3; } } } void inserir_candidato(char* titulo1, char* instituicao1, char* investigador1,int duracao1,char* palavras_chave1) { int l; projeto d = (projeto) malloc(sizeof(candidato)); if(d) { d->codigo=code; d->titulo = titulo1; d->instituicao = instituicao1; d->investigador = investigador1; d->duracao=duracao1; d->palavras_chave=palavras_chave1; } else { printf("MEMORIA INSUFICIENTE!\n"); } for(l=0;l<maximo;l++) { projeto pd = (projeto) array_projetos[l]; if(pd == NULL) //primeira posição livre { (array_projetos[l]) = d; printf("Inseriu o candidato\n"); break; } } } void inserir_gastos(int equipamentos1,int bolsas1,int consumiveis1,int consultores1,int deslocacoes1, int gastos_gerais1) { int r; financiamento pd = (financiamento) malloc(sizeof(gastos)); if(pd) { pd->equipamentos=equipamentos1; pd->bolsas=bolsas1; pd->consumiveis=consumiveis1; pd->consultores=consultores1; pd->deslocacoes=deslocacoes1; pd->gastos_gerais=gastos_gerais1; } else { printf("MEMORIA INSUFICIENTE!\n"); } for(r=0;r<maximo;r++) { financiamento pd = (financiamento) array_financiamentos[r]; if(pd == NULL) //primeira posição livre { (array_financiamentos[r]) = pd; printf("Inseriu o candidato\n"); break; } } } void listar_candidatos() { int i; printf("\n-------- LISTAGEM ------------\n"); for(i=0;i<maximo;i++){ if(array_projetos[i] != NULL) //candidato inserido { printf("Codigo: %d\n",array_projetos[i]->codigo); //AQUII printf("TITULO:%s\n",array_projetos[i]->titulo); printf("INSTITUICAO:%s\n",array_projetos[i]->instituicao); printf("INVESTIGADOR:%s\n",array_projetos[i]->investigador); printf("DURACAO:%d\n",array_projetos[i]->duracao); printf("PALAVRAS_CHAVE:%s\n",array_projetos[i]->palavras_chave); } } } void mostrarCandidatoEscolhido(char* candidatoProcurado) { int i=0; int encontrado=0; for(i=0;i<maximo;i++) { if(array_projetos[i] != NULL && array_projetos[i]->titulo == candidatoProcurado) { printf("CODIGO: %d",array_projetos[i]->codigo); printf("TITULO:%s\n",array_projetos[i]->titulo); printf("INSTITUICAO:%s\n",array_projetos[i]->instituicao); printf("INVESTIGADOR:%s\n",array_projetos[i]->investigador); printf("DURACAO:%d\n",array_projetos[i]->duracao); printf("PALAVRAS_CHAVE:%s\n",array_projetos[i]->palavras_chave); encontrado=1; break; } } if(encontrado==0) //!encontrado printf("O candidato não existe\n"); } void removerAlunoEscolhido(char* codCandidato) { int i=0; int encontrado=0; for(i=0;i<maximo;i++) { if(array_projetos[i] != NULL && array_projetos[i]->titulo == codCandidato) { free(array_projetos[i]); array_projetos[i]=NULL; encontrado=1; break; } } if(encontrado==0) //!encontrado printf("O aluno não existe\n"); } void loadD() { FILE *f = fopen("dadosCandidatos.txt","rt"); char str[100]; int i=0; int num; char* aux[4]; if(f!=NULL) { while(!feof(f)) //ficheiro aberto com sucesso { fgets(str,100,f); if(i==5) { num = atoi(aux[0]); inserir_candidato(aux[0],aux[1],aux[2],num,aux[4]); i=0; } else{ aux[i] = strdup(str); i++; } } } } void gravaD() { FILE *f = fopen("dadosCandidatos.txt","at"); int i=0; if(f!=NULL) { for(i=0;i<maximo;i++) { if(array_projetos[i]!=NULL) { fprintf(f,"\n%s\n",array_projetos[i]->titulo); fprintf(f,"%s\n",array_projetos[i]->instituicao); fprintf(f,"%s\n",array_projetos[i]->investigador); fprintf(f,"%s\n",array_projetos[i]->duracao); fprintf(f,"%s\n",array_projetos[i]->palavras_chave); fprintf(f,"---------------"); } else { printf("NAO GUARDOU O PROJETO!"); } } } fclose(f); } int main() { double valor,valor1,valor2; int avaliacoes_finais; int gastos_finais; criar_projeto(); gastos_finais = soma_gastos(1,1,1,1,1,1); printf("\nGASTOS FINAIS: %d EUROS\n",gastos_finais); avaliacoes_finais=notas_avaliacao(1,1,1,1,1,1,1,1,1,1,1,1); printf("\nAVALIACOES FINAIS: %d\n",avaliacoes_finais); if (avaliacoes_finais<3) { printf("\nPROJECTO REJEITADO!!\n"); } else if (avaliacoes_finais==3) { valor=0.3*gastos_finais; printf("\nSubsidio no valor de %0.2f\n",valor);} else if (avaliacoes_finais == 4) { valor1=0.75*gastos_finais; printf("\nSubsidio no valor de %0.2f\n",valor1);} else if ( avaliacoes_finais==5) { valor2=1*gastos_finais; printf("\nSubsidio no valor de %0.2f\n",valor2);} inserir_gastos(1,1,1,1,1,1); system("pause"); return 0; }
HappyHippyHippo Posted April 30, 2012 at 01:33 PM Report #452248 Posted April 30, 2012 at 01:33 PM em que linha de código tu gravas o projecto no array array_projectos ??? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
tonelol1 Posted April 30, 2012 at 02:00 PM Author Report #452258 Posted April 30, 2012 at 02:00 PM Acho que é logo das primeiras. projeto array_projetos [maximo]; No entanto, já me disseram que é provável que falte alguma coisa para preencher o array. Mas ainda nao percebi o que é.
Localhost Posted April 30, 2012 at 03:27 PM Report #452282 Posted April 30, 2012 at 03:27 PM lol, tu metes um código com centenas de linhas, metes um comentário a dizer onde está o "erro" e queres que alguém o descubra por ti sem sequer explicares as coisas em condições?.. here since 2009
Rui Carlos Posted April 30, 2012 at 04:44 PM Report #452304 Posted April 30, 2012 at 04:44 PM Na função criar_projeto parece-me que estás a guardar os valores em variáveis locais, que serão perdido quando a função terminar. Na função soma_gastos tens uma série de parâmetros na função que não são lidos, e que deviam ser apenas variáveis locais. Adicionalmente, está a misturar IO com computação, o que não é lá grande ideia. Na função notas_avaliacao penso que tens os mesmos problemas da função anterior. Adicionalmente, penso que os returns lá no meio vão fazer com que apenas executes um iteração do ciclo. Um return no meio de um ciclo também não é lá grande ideia. Não vi o restante código, mas penso que o primeiro problema que falei pode ser uma causa para o problema de que te queixas. Era boa ideia pelo menos colocar o código devidamente indentado. Rui Carlos Gonçalves
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