Jump to content
Sign in to follow this  
tonelol1

Valor da soma de uma função

Recommended Posts

tonelol1

Boas. Já fiz o código todo mas nao consigo fazer com que o valor da soma numa funcao vá para a main para fazer os calculos. Como se faz? Está assinalado com AQUIII!!

Dá este erro: 140  cannot convert `double' to `candidato*' in return

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define maximo 5

int code=0;

typedef struct candidato {
        char* titulo;
        char* instituicao;
        char* investigador;
        int duracao;
        char* palavras_chave[5];
        
       
        } candidato, *projeto;
        
typedef struct gastos {
        int equipamentos;
        int bolsas;
        int consumiveis;
        int consultores;
        int deslocacoes;
        int gastos_gerais;
        
        }gastos, * financiamento;
                      
typedef struct nota {
        int originalidade;
        int qualidade;
        int idoneidade;
        int exequibilidade;
        }nota, *avaliacao;
        
projeto array_candidato[maximo];

projeto insere (char* titulo1,char* instituicao1,char* investigador1,
int duracao1,char* palavras_chave1)
{
            projeto p = (projeto) malloc(sizeof(candidato));
            if(p)
            {
                 p->titulo=titulo1;
                 p->instituicao=instituicao1;
                 p->investigador=investigador1;
                 p->duracao=duracao1;
                for(int i=0;i<5;i++) {
                 p->palavras_chave[i] = palavras_chave1;
            }
                 return (p);
                 }
else
{
	printf("MEMORIA INSUFICIENTE!\n");		
}

for(int i=0;i<maximo;i++) {
            projeto pp =(projeto) array_candidato[i];
            if (pp == NULL) 
            {
                   (array_candidato[i])= p;
                   printf("Inseriu o candidato!\n");
                   break;
                   }
}
}                

projeto registar(char* titulo2,char* instituicao2,char* investigador2,
int duracao2,char* palavras_chave2[5])
{ 
    int equipamentos,bolsas,consumiveis,consultores,deslocacoes,gastos_gerais;
           
            projeto p1 = (projeto) malloc(sizeof(candidato));
            if(p1)
            {
                 p1->titulo=titulo2;
                 p1->instituicao=instituicao2;
                 p1->investigador=investigador2;
                 p1->duracao=duracao2;
                for(int j=0;j<5;j++) {
                 p1->palavras_chave[j] = palavras_chave2[5];
            }
                 return (p1);
                 }
else
{

  printf("MEMORIA INSUFICIENTE!\n");		
}


printf("Introduza o titulo: ");
    gets(titulo2);
   printf("\nIntroduza a instuituicao proponente: ");
    gets(instituicao2);
    printf("\nIntroduza o nome do investigador responsavel: ");
    gets(investigador2);
    printf("\nIntroduza a duracao do projecto(em anos): ");
    scanf("%d",&duracao2);
    printf("\nIntroduza a palavra chave (ate 5): ");
    for ( int j=0;j<5;j++) {
    gets(palavras_chave2[j]); 
    }
    printf("Introduza o valor para os gastos em compra de equipamento: ");
    scanf("%d",&equipamentos);
    printf("Introduza o valor para os gastos na bolsa: ");
    scanf("%d",&bolsas);
    printf("Introduza o valor para os gastos com consumiveis: ");
    scanf("%d",&consumiveis);
    printf("Introduza o valor para os gastos com consultores: ");
    scanf("%d",&consultores);
    printf("Introduza o valor para os gastos com deslocacoes: ");
    scanf("%d",&deslocacoes);
    printf("Introduza o valor para os gastos gerais: ");
    scanf("%d",&gastos_gerais);



financiamento p2 = (financiamento) malloc(sizeof(gastos));
            if(p2)
            {
    p2->equipamentos;
    p2->bolsas;
    p2->consumiveis;
    p2->consultores;
    p2->deslocacoes;
    p2->gastos_gerais;
            }
             
              
else
{

  printf("MEMORIA INSUFICIENTE!\n");		
}


double soma_despesas= p2->equipamentos+p2->bolsas+p2->consumiveis+ ///////////// AQUIIIIIIIIIIIIIIIIII!!!!!!!!!!!!!!!!!!!!!!!!!!!
    p2->consultores+p2->deslocacoes+p2->gastos_gerais;   
    return soma_despesas;
   
}

avaliacao registar( int originalidade11,int originalidade22,int originalidade33,
    int qualidade11,int qualidade22,int qualidade33,
    int idoneidade11,int idoneidade22,
    int idoneidade33,
    int exequibilidade11,int exequibilidade22,
    int exequibilidade33) {
    
    int originalidade1,originalidade2,originalidade3;
    int qualidade1,qualidade2,qualidade3;
    int idoneidade1,idoneidade2,idoneidade3;
    int exequibilidade1,exequibilidade2,exequibilidade3;
    
     for(int k = 0 ; k<3 ; k++) {
             if ( k = 0) {
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade1);
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade1);
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade1);
                  printf("Introduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&exequibilidade1);
                  }
                  else if ( k=1) {
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade2);
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade2);
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade2);
                  printf("Introduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&exequibilidade2);
                  }
                  else if (k=2) {
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade3);
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade3);
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade3);
                  printf("Introduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&exequibilidade3);
                  }
avaliacao p3 = (avaliacao) malloc(sizeof(nota));
            if(p3)
            {
                 p3->originalidade=originalidade1;
                 p3->originalidade=originalidade2;
                 p3->originalidade=originalidade3;
                 p3->qualidade=qualidade1;
                 p3->qualidade=qualidade2;
                 p3->qualidade=qualidade3;
                   p3->idoneidade=idoneidade1;
                p3->idoneidade=idoneidade2;
                p3->idoneidade=idoneidade3;
                p3->exequibilidade=exequibilidade1;
                p3->exequibilidade=exequibilidade2;
                p3->exequibilidade=exequibilidade3;
                
                
                
                 return (p3);
                 }
else
{
	printf("MEMORIA INSUFICIENTE!\n");		
}

}
float media= (originalidade1+originalidade2+originalidade3+qualidade1+qualidade2+qualidade3+idoneidade1+idoneidade2+idoneidade3+exequibilidade1+exequibilidade2+exequibilidade3)/12;
printf ( "Media= %0.2f", media);



}

int main (void) {
     
projeto insere();
avaliacao registar();

float soma_despesas= 500;
int media=3;
if (media<3) 
{
             printf("PROJECTO REJEITADO!!");
             }
             else if (media=3) {
                  double valor=0.3*soma_despesas;
                  printf("Subsidio no valor de %0.2f",valor);}
                  else if (media = 4) {
                       double valor1=0.75*soma_despesas;
                  printf("Subsidio no valor de %0.2f",valor1);}
                  else if ( media=5) {
                       double valor2=1*soma_despesas;
                  printf("Subsidio no valor de %0.2f",valor2);}

       
       
   system("PAUSE");
   
   return 0;
}



Share this post


Link to post
Share on other sites
HappyHippyHippo

apesar da indentação horrível e más práticas de C como declaração de variáveis a meio de uma função tens isto:

projeto registar(char* titulo2,char* instituicao2,char* investigador2, int duracao2,char* palavras_chave2[5]) {
    ...
    double soma_despesas= p2->equipamentos+p2->bolsas+p2->consumiveis+ ///////////// AQUIIIIIIIIIIIIIIIIII!!!!!!!!!!!!!!!!!!!!!!!!!!!
    p2->consultores+p2->deslocacoes+p2->gastos_gerais;   
    return soma_despesas;
}

1º - não tens o tipo de valor de retorno na tua função ....

2º - tens o caratere '+' no final da linha assinalada, logo não é uma instrução válida

PS : olha bem para os warning e erros do compilador, de certeza que ele se queixou dizendo qual era o problema ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
tonelol1

O compilador so deu esse erro.Mas eu na main tenho isto:

int main (void) {
     
projeto insere();
avaliacao registar();




if (media<3) 
{
             printf("PROJECTO REJEITADO!!");
             }
             else if (media=3) {
                  double valor=0.3*soma_despesas;
                  printf("Subsidio no valor de %0.2f\n",valor);}
                  else if (media = 4) {
                       double valor1=0.75*soma_despesas;
                  printf("Subsidio no valor de %0.2f\n",valor1);}
                  else if ( media=5) {
                       double valor2=1*soma_despesas;
                  printf("Subsidio no valor de %0.2f\n",valor2);}

Tanto a media como o soma_despesas não estão a retornar valores para funcao main.

Como é que faco com que a main utilize as funcoes que pus em cima para ele executar os printf's todos? Isso que meti está mal. :/

Se perceberes muito disto nao me podes dar um ajustamento no programa por favor? Estive o dia todo nisto, mas sozinho , foi o melhor que soube fazer. Se nao te importares. Ou entao da-me umas dicas do que está mal e assinala no codigo.

Agradeço desde já.

Share this post


Link to post
Share on other sites
HappyHippyHippo

exemplo de uso de funções e valor de retorno:

int func(int arg) { // [tipo_de_retorno][nome_da_funcao]([lista_de_argumentos])
  return arg+10; // return indica que a função irá parar aqui e retornar valor da instrução
}

int main() {
  int resultado = func(34); // guardar o valor de retorno
  printf("resultado func(34): %d\n", resultado); // apresenta o resultado guardado na variável
  printf("resultado func(34): %d\n", func(34)); // não é necessário o uso da variável, é possível o uso do resultado directamente
  return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
tonelol1

Não consegui  🤔

Está assim tão mal estruturado?

Primeiro meto as estruturas.

typedef struct candidato {
        char* titulo;
        char* instituicao;
        char* investigador;
        int duracao;
        char* palavras_chave[5];
        
       
        } candidato, *projeto;
        
typedef struct gastos {
        int equipamentos;
        int bolsas;
        int consumiveis;
        int consultores;
        int deslocacoes;
        int gastos_gerais;
        
        }gastos, * financiamento;
                      
typedef struct nota {
        int originalidade;
        int qualidade;
        int idoneidade;
        int exequibilidade;
        }nota, *avaliacao;

Depois as classes

 projeto insere (char* titulo1,char* instituicao1,char* investigador1,
int duracao1,char* palavras_chave1)
{
            projeto p = (projeto) malloc(sizeof(candidato));
            if(p)
            {
                 p->titulo=titulo1;
                 p->instituicao=instituicao1;
                 p->investigador=investigador1;
                 p->duracao=duracao1;
                for(int i=0;i<5;i++) {
                 p->palavras_chave[i] = palavras_chave1;
            }
                 return (p);
                 }
else
{
	printf("MEMORIA INSUFICIENTE!\n");		
}

for(int i=0;i<maximo;i++) {
            projeto pp =(projeto) array_candidato[i];
            if (pp == NULL) 
            {
                   (array_candidato[i])= p;
                   printf("Inseriu o candidato!\n");
                   break;
                   }
}
}                

projeto registar(char* titulo2,char* instituicao2,char* investigador2,
int duracao2,char* palavras_chave2[5])
{ 
    int equipamentos,bolsas,consumiveis,consultores,deslocacoes,gastos_gerais;
           
            projeto p1 = (projeto) malloc(sizeof(candidato));
            if(p1)
            {
                 p1->titulo=titulo2;
                 p1->instituicao=instituicao2;
                 p1->investigador=investigador2;
                 p1->duracao=duracao2;
                for(int j=0;j<5;j++) {
                 p1->palavras_chave[j] = palavras_chave2[5];
            }
                 return (p1);
                 }
else
{

  printf("MEMORIA INSUFICIENTE!\n");		
}


printf("Introduza o titulo: ");
    gets(titulo2);
   printf("\nIntroduza a instuituicao proponente: ");
    gets(instituicao2);
    printf("\nIntroduza o nome do investigador responsavel: ");
    gets(investigador2);
    printf("\nIntroduza a duracao do projecto(em anos): ");
    scanf("%d",&duracao2);
    printf("\nIntroduza a palavra chave (ate 5): ");
    for ( int j=0;j<5;j++) {
    gets(palavras_chave2[j]); 
    }
    printf("Introduza o valor para os gastos em compra de equipamento: ");
    scanf("%d",&equipamentos);
    printf("Introduza o valor para os gastos na bolsa: ");
    scanf("%d",&bolsas);
    printf("Introduza o valor para os gastos com consumiveis: ");
    scanf("%d",&consumiveis);
    printf("Introduza o valor para os gastos com consultores: ");
    scanf("%d",&consultores);
    printf("Introduza o valor para os gastos com deslocacoes: ");
    scanf("%d",&deslocacoes);
    printf("Introduza o valor para os gastos gerais: ");
    scanf("%d",&gastos_gerais);



financiamento p2 = (financiamento) malloc(sizeof(gastos));
            if(p2)
            {
    p2->equipamentos;
    p2->bolsas;
    p2->consumiveis;
    p2->consultores;
    p2->deslocacoes;
    p2->gastos_gerais;
            }
             
              
else
{

  printf("MEMORIA INSUFICIENTE!\n");		
}

int func(int arg) {
    
arg= p2->equipamentos+p2->bolsas+p2->consumiveis+p2->consultores+p2->deslocacoes+p2->gastos_gerais;   
    return arg;}
   
}

avaliacao registar( int originalidade11,int originalidade22,int originalidade33,
    int qualidade11,int qualidade22,int qualidade33,
    int idoneidade11,int idoneidade22,
    int idoneidade33,
    int exequibilidade11,int exequibilidade22,
    int exequibilidade33,float media) {
    
    int originalidade1,originalidade2,originalidade3;
    int qualidade1,qualidade2,qualidade3;
    int idoneidade1,idoneidade2,idoneidade3;
    int exequibilidade1,exequibilidade2,exequibilidade3;
    
     for(int k = 0 ; k<3 ; k++) {
             if ( k = 0) {
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade1);
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade1);
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade1);
                  printf("Introduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&exequibilidade1);
                  }
                  else if ( k=1) {
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade2);
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade2);
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade2);
                  printf("Introduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&exequibilidade2);
                  }
                  else if (k=2) {
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade3);
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade3);
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade3);
                  printf("Introduza a nota da Exequilibidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&exequibilidade3);
                  }
avaliacao p3 = (avaliacao) malloc(sizeof(nota));
            if(p3)
            {
                 p3->originalidade=originalidade1;
                 p3->originalidade=originalidade2;
                 p3->originalidade=originalidade3;
                 p3->qualidade=qualidade1;
                 p3->qualidade=qualidade2;
                 p3->qualidade=qualidade3;
                   p3->idoneidade=idoneidade1;
                p3->idoneidade=idoneidade2;
                p3->idoneidade=idoneidade3;
                p3->exequibilidade=exequibilidade1;
                p3->exequibilidade=exequibilidade2;
                p3->exequibilidade=exequibilidade3;
                
                
                
                 return (p3);
                 }
else
{
	printf("MEMORIA INSUFICIENTE!\n");		
}

}
media= (originalidade1+originalidade2+originalidade3+qualidade1+qualidade2+qualidade3+idoneidade1+idoneidade2+idoneidade3+exequibilidade1+exequibilidade2+exequibilidade3)/12;
printf ( "Media= %0.2f", media);

e por fim a main

int main () {
     
projeto insere();
avaliacao registar();





if (media<3) 
{
             printf("PROJECTO REJEITADO!!");
             }
             else if (media=3) {
                  double valor=0.3*soma_despesas;
                  printf("Subsidio no valor de %0.2f\n",valor);}
                  else if (media = 4) {
                       double valor1=0.75*soma_despesas;
                  printf("Subsidio no valor de %0.2f\n",valor1);}
                  else if ( media=5) {
                       double valor2=1*soma_despesas;
                  printf("Subsidio no valor de %0.2f\n",valor2);}

       
       
   system("PAUSE");
   
   return 0;
}



Tudo que é texto tenho que por na main?

Para que serve isto, fiz 3 vezes ao longo do codigo mas nao sei bem porque.

avaliacao p3 = (avaliacao) malloc(sizeof(nota));
            if(p3)
            {
                 p3->originalidade=originalidade1;
                 p3->originalidade=originalidade2;
                 p3->originalidade=originalidade3;
                 p3->qualidade=qualidade1;
                 p3->qualidade=qualidade2;
                 p3->qualidade=qualidade3;
                   p3->idoneidade=idoneidade1;
                p3->idoneidade=idoneidade2;
                p3->idoneidade=idoneidade3;
                p3->exequibilidade=exequibilidade1;
                p3->exequibilidade=exequibilidade2;
                p3->exequibilidade=exequibilidade3;

Alguma dica?  :cheesygrin:

Share this post


Link to post
Share on other sites
jpaulino

PROJETO!! AJUDEM PLEASE :D

Mais um tópico criado com este titulo, que é contra as regras do fórum, será imediatamente bloqueado!

Share this post


Link to post
Share on other sites
bsccara

A linguagem C não tolera coisas feitas 'sem se saber porque'. Começa por imprimir o PDF neste link (http://piano.dsi.uminho.pt/disciplinas/plp/lingc/c_tutorial/ApostilaC_UFMG.pdf) e estudá-lo, pois aparentemente já estás completamente à toa.

O problema principal no teu código é a tentativa de passar dois valores diferentes por onde passa apenas um: o retorno da função. Ou passas um ponteiro para uma estrutura ou um valor numérico. Escolhe.

O que acontece com frequência é ser efectivamente necessário retornar mais de um valor da função; nesse caso no máximo um (mas pode não ser nenhum) é retornado através do valor de retorno da função, enquanto que os outros são retornados através de parâmetros passados por referência (passando ponteiros para eles) e alterados na função. Se quiseres retornar três valores diferentes duma função podes fazer:

int funcao1(double * valor2, short int * valor3)
{
  *valor2 = 234.5;
  *valor3 = 10000;
  return 2;
}

void funcao2(int * valor1, double * valor2, short int * valor3)
{
  *valor1 = 2;
  *valor2 = 234.5;
  *valor3 = 10000;
}

int main()
{
  int param1;
  double param2;
  short int param3;

  param1 = funcao1(&param2,&param3);
  /* A linha abaixo coloca os valores nas mesmas variáveis */
  funcao2(&param1,&param2,&param3);
}

Share this post


Link to post
Share on other sites
tonelol1

Não sei se já reparas te mas o int soma tem de estar dentro da class avaliacao registar para ter acesso aos valores de p2-> .. Da logo erro no int soma(double soma_despesas).

int soma(double soma_despesas) {

   

soma_despesas= p2->equipamentos+p2->bolsas+p2->consumiveis+p2->consultores+p2->deslocacoes+p2->gastos_gerais; 

    return soma_despesas;

}

Comeca logo com errro e diz que deve levar um ; depois do int soma(double soma_despesas)

int main() {

printf("%0.2f", &soma_despesas);

...

}

Share this post


Link to post
Share on other sites
tonelol1

Pretende-se criar, um sistema de informação (SI) para apoio à seleção de projetos de investigação candidatos ao financiamento disponibilizado por uma Instituição Nacional. Cada projeto candidato é caracterizado pelos seguintes atributos:

 titulo;

 instituição proponente;

 nome do investigador responsável;

 duração do projeto (número de anos);

 lista de palavras-chave (até 5), designando as grandes áreas/tópicos de investigação;

 gastos previstos (em euros) distribuídos pelas seguintes rúbricas: compra equipamento, pagamento bolsas, despesas com consumíveis, despesas com consultores, deslocações nacionais ou estrangeiras, gastos gerais;

 classificação atribuída pelos 3 avaliadores. Será fornecida uma sequência de 5 letras1 representando a nota dada a cada um dos 4 critérios de apreciação das propostas: originalidade, qualidade da proposta, idoneidade da equipa, exequibilidade.

2.1 Aquisição dos Dados e Armazenamento

Nesta parte do trabalho, pretende-se que desenvolva um programa que lhe permita ler os dados referentes a vários projetos, atribuindo, a cada um, um código interno (pode ser sequencial) e calcular o custo total (financiamento solicitado) e a classificação final (média dos 3 avaliadores sendo, para cada um, calculada a média das notas atribuídas aos 4 parâmetros, considerando N=1, M=2, S=3, B=4, E=5).

Após guardar num vetor de registos os dados lidos o programa deve escrever num ficheiro de texto (nome dado pelo utilizador) por ordem decrescente de classificações, o código interno, o

cada letra pode tomar um dos valores N, M, S, B, E, significando: Não satisfaz; Minimamente satisfatório; Satisfaz; Bom; Excelente.

título, a instituição, o financiamento solicitado, a classificação final e o subsídio a atribuir pela Instituição Nacional, calculado de acordo com o seguinte critério:

 0% (o projeto é rejeitado), se a classificação for inferior a 3 pontos;

 30% do solicitado, se a classificação for 3 pontos;

 75% do solicitado, se a classificação for 4 pontos;

 100% do solicitado, se a classificação for 5 pontos.

Como é que sabes que nao é preciso fazer aquilo, sem o texto? Se souberes o que está mal diz sff. Acho que o que está mal é so as partes que tenho p,p2,p3->

Share this post


Link to post
Share on other sites
tonelol1

Acho que consegui fazr o codigo e para ja mais simples. No entanto por alguma razao quando o resultado do subsidio é superior a 18 ele imprime 18.

Por exemplo

valor1=0.75*gastos_finais. Se gastos_finais = 60 , entao 0.75*60 = 45. MAS APARECE 18. Alguem sabe porquê?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define maximo 5

int code=0;

typedef struct candidato {
        char titulo[50];
        char instituicao[50];
        char investigador[50];
        int duracao;
        char palavras_chave[5];
        
       
        } candidato, *projeto;
        
typedef struct gastos {
        int equipamentos;
        int bolsas;
        int consumiveis;
        int consultores;
        int deslocacoes;
        int gastos_gerais;
        
        }gastos, * financiamento;
                      
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 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("\nIntroduza a palavra chave (ate 5): ");
           for (  j=0;j<5;j++) {
              
          scanf("%s",&palavras_chave[j]); 
           }
           }
          
          int soma_gastos ( int equipamentos,int bolsas,int consumiveis,int consultores,int deslocacoes,int gastos_gerais) {
           
           int soma; 
           
           printf("Introduza o valor para os gastos em compra de equipamento: ");
           scanf("%d",&equipamentos);
          
           printf("Introduza o valor para os gastos na bolsa: ");
           scanf("%d",&bolsas);
          
           printf("Introduza o valor para os gastos com consumiveis: ");
           scanf("%d",&consumiveis);
           
            printf("Introduza o valor para os gastos com consultores: ");
            scanf("%d",&consultores);
            
             printf("Introduza o valor para os gastos com deslocacoes: ");
             scanf("%d",&deslocacoes);
            
             printf("Introduza 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("Introduza qual e o seu numero de avaliador: ");
             scanf("%d",&k);
             if ( k = 0) {
                  
                  printf("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade1);
                 
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade1);
                  
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade1);
                  
                  printf("Introduza 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("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade2);
                 
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade2);
                 
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade2);
                 
                  printf("Introduza 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("Introduza a nota da Originalidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&originalidade3);
                 
                  printf("Introduza a nota da Qualidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&qualidade3);
                  
                  printf("Introduza a nota da Idoneidade em decimal! N=1, M=2, S=3, B=4, E=5: ");
                  scanf("%d",&idoneidade3);
                 
                  printf("Introduza 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;
                 }
  
    
}
}
    int main() {
       
       double valor,valor1,valor2;
       int avaliacoes_finais;
        int gastos_finais; 
       gastos_finais = soma_gastos(1,1,1,1,1,1);
        printf("GASTOS FINAIS: %d\n",gastos_finais);
        
        avaliacoes_finais=notas_avaliacao(1,1,1,1,1,1,1,1,1,1,1,1);
        printf("AVALIACOES FINAIS: %d\n",avaliacoes_finais);
        
        
        if (avaliacoes_finais<3) 
{
             printf("PROJECTO REJEITADO!!\n");
             }
             else if (avaliacoes_finais=3) {
                   valor=0.3*gastos_finais;
                  printf("Subsidio no valor de %0.2f\n",valor);}
                 
                  else if (avaliacoes_finais = 4) {
                        valor1=0.75*gastos_finais;
                  printf("Subsidio no valor de %0.2f\n",valor1);}
                  
                  else if ( avaliacoes_finais=5) {
                        valor2=1*gastos_finais;
                  printf("Subsidio no valor de %0.2f\n",valor2);}

       
       
        
        system("pause");
        
        return 0; 
        }

Share this post


Link to post
Share on other sites
pmg
int code=0;

Se conseguires evitar o uso de variaveis globais, melhoras, em muito, a capacidade de perceber o codigo tomando cada parte (cada funcao) isoladamente.

void criar_projeto() {
          gets(titulo);

Nao. Nao uses gets() nem a brincar!

A funcao gets e impossivel de usar com seguranca, e e muito facil substitui-la por fgets().

    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) {

Xiiiiiiiiiiiiii ... nao consegues agrupar estes parametros todos numa estrutura?

    int main() {
             else if (avaliacoes_finais=3) {

Aha! Tens uma atribuicao onde, aparentemente, querias uma comparacao.

Aumenta o nivel de warnings do teu compilador, e trata esses warnings como erros.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
tonelol1

Ja está a funcionar xD. thx Vou tentar terminar

Já agora nao estou a encontrar como aumentar os warnings

Share this post


Link to post
Share on other sites
pmg

Já agora nao estou a encontrar como aumentar os warnings

Aparentemente usas um compilador da Borland???

De acordo com este link ( http://edn.embarcadero.com/article/20997 ) deves usar o argumento -wxxx para "warning control"


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
tonelol1

Alguem me consegue disser porque é que as variaveis não estão a ser guardadas em memoria para depois aparecerem na LISTAGEM?

Se calhar é melhor copiarem o programa e ver no cmd.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define maximo 5

int code=0;

typedef struct candidato {
        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;
               
              //variavel global 
             
            
                 
         
          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]); 
         
         
         }
         }
         
         }
           
           
           
           
           
          
          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->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("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("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* titCandidato)
{
int i=0;
int encontrado=0;
for(i=0;i<maximo;i++)
{
	if(array_projetos[i] != NULL && array_projetos[i]->titulo == titCandidato)
	{
		free(array_projetos[i]);
		array_projetos[i]=NULL;
		encontrado=1;
		break;
	}				
}
if(encontrado==0) //!encontrado
	printf("O aluno não existe\n");			
}



    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);}

       
        
       
       listar_candidatos();
        
        system("pause");
        
        return 0; 
        }ola
        

Share this post


Link to post
Share on other sites
bsccara

Procura o sitio onde atribuis valores ao array 'array_projetos'. Depois procura o sitio onde chamas essa função...

P.S. Lado nenhum

P.P.S. Por favor, por favor, por favor indenta esse código em condições. Código dentro de chavetas -> pelo menos 2 caracteres mais à direita. Só.

P.P.P.S Tira o 'ola' do fim do código.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.