• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

killerhcf

programacao c em TADs duvidas

5 mensagens neste tópico

bem o programa é este:

mainNotas.c

#include<stdio.h>
#include"notas.h"

void lerNotas(float *e, float *t);
main()
{
    float exame, trabalho;
    notaAed frequencia, nNotasAed;
    frequencia = criarNotaAed(exame,0);
    lerNotas( & exame, & trabalho);
    nNotasAed = criarNotaAed (exame ,trabalho);
    printf("frequencia do exame:%3f.1\n",frequencia);
    printf("nota que obteve a aed:%3f.1\n",nNotasAed);
    destroirNotaAed(frequencia);
    destroirNotaAed(calculaNotaAed);
    return 0;
}
void lerNotas(float *e, float *t)
{
     printf("insira os valores do exame e do trabalho;\n");
     scanf("%3f.1 %3f.1", e, t);
}

notas.c

#include <stdlib.h>
#include "notas.h"

//defenicao de notas
typedef struct notasAed
{
int exame;
int trabalho;
} notasAed1 *nNotasAed;

notasAed criarNotaAed(int ex, int trab)
{
nNotasAed n;
n = (nNotasAed) malloc(sizeof(notasAed1));
if (n==NULL) return NULL;
n = exame -> exm;
n = trabalho -> trab;

return (notasAed) n; 
}

void destroirNotaAed(notasAed n){
     free(n);
}
void registoNotaPratica(notaAed np){
     nNotasAed aux = (notasAed) n;
     return aux -> trab;
}
void registoNotaTeorica(notaAed nt)
{
nNotasAed aux = (notasAed) n;
return aux -> exm;
}
int frequencia (notaAed n)
{
nNotasAed aux = (notasAed) n;	
(aux -> trab)>=9.5
return ((aux -> trab)>=9.5);
}
int calculaNotaAed(notaAed n)
{
nNotasAed aux = (notasAed) n;
return ((aux -> trab * 0.2)+( aux -> exm * 0.8 ));
}

notas.h

#ifndef _H_notas
#define _H_notas


typedef void* notaAed;

notaAed criarNotaAed(int exame, int trabalho);
void destroirNotaAed(notaAed n);
void registoNotaPratica(notaAed np);
void registoNotaTeorica(notaAed nt);	
float frequecia(notaAed n); 
float calculaNotaAed(notaAed n);

#endif 

no notas.h e notas.c acho que ta tudo certo no mainNotas.c  ja fiquei confuso pois tava a fazer como fizeram numa aula teorica um programa semelhante em TADs mas como ainda ha algumas diferencas nao sei se ta certo pois ate da alguns erros mas nao percebo se é de eu estar a chamar algum dos outros ficheiros mal ou qual é o problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me que os nomes dos tipos de dados não estão correctos.

E já agora, indica os erros que obténs.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

os erros que aparecem sao:

  [linker error] undefined reference to `criarNotaAed'

  [linker error] undefined reference to `criarNotaAed'

  [linker error] undefined reference to `destroirNotaAed'

  [linker error] undefined reference to `calculaNotaAed'

  [linker error] undefined reference to `destroirNotaAed'

alguns tao repetidos mas é pq eles metem la mesmo assim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me que os nomes dos tipos de dados não estão correctos.

E já agora, indica os erros que obténs.

os nomes dos tipos dos dados com isto queres dizer a frequencia e exame que ta defenido na notaAed que é do tipo void* ou seja que vai buscar o tipo notasAed1 ou *nNotasAed?? desculpa la com isto mas isto fica mesmo confunso que eu ja nem sei qual é o o nome do tipo de dados.

é que depois parece me que a frequencia e o exame sao do tipo notaAed pois na no nota.h ta la defenido que a notaAed é do tipo void* que ta apontar para o tipo que depois é defenido no nota.c(a estrutura) por isso é o mesmo que dizer que notaAed é do tipo *nNotasAed que ta no n, mas depois de volta ao nota.h o notaAed ta defenido que é composto pelo conjunto de prototipos de funcoes entao isso faz que o notaAed fique tambem um tipo certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei que compilador estás a usar, nem como estás a compilar isso, mas a mim aparece-me muitos mais erros.

rcg @ ~ > gcc -c notas.c

notas.c:9: error: parse error before ‘*’ token

notas.c:9: warning: data definition has no type or storage class

notas.c:11: error: parse error before "criarNotaAed"

notas.c:12: error: conflicting types for ‘criarNotaAed’

notas.h:7: error: previous declaration of ‘criarNotaAed’ was here

notas.c: In function ‘criarNotaAed’:

notas.c:13: error: parse error before "n"

notas.c:14: error: ‘n’ undeclared (first use in this function)

notas.c:14: error: (Each undeclared identifier is reported only once

notas.c:14: error: for each function it appears in.)

notas.c:14: error: parse error before "malloc"

notas.c:15: warning: return makes integer from pointer without a cast

notas.c:16: error: ‘exame’ undeclared (first use in this function)

notas.c:17: error: ‘trabalho’ undeclared (first use in this function)

notas.c:19: error: ‘notasAed’ undeclared (first use in this function)

notas.c:19: error: parse error before "n"

notas.c: At top level:

notas.c:22: error: parse error before "n"

notas.c: In function ‘destroirNotaAed’:

notas.c:22: error: number of arguments doesn’t match prototype

notas.h:8: error: prototype declaration

notas.c:23: error: ‘n’ undeclared (first use in this function)

notas.c: In function ‘registoNotaPratica’:

notas.c:26: error: parse error before "aux"

notas.c:27: error: ‘aux’ undeclared (first use in this function)

notas.c:27: warning: ‘return’ with a value, in function returning void

notas.c: In function ‘registoNotaTeorica’:

notas.c:31: error: parse error before "aux"

notas.c:32: error: ‘aux’ undeclared (first use in this function)

notas.c:32: warning: ‘return’ with a value, in function returning void

notas.c: In function ‘frequencia’:

notas.c:36: error: parse error before "aux"

notas.c:37: error: ‘aux’ undeclared (first use in this function)

notas.c:38: error: parse error before "return"

notas.c: At top level:

notas.c:41: error: conflicting types for ‘calculaNotaAed’

notas.h:12: error: previous declaration of ‘calculaNotaAed’ was here

notas.c: In function ‘calculaNotaAed’:

notas.c:42: error: parse error before "aux"

notas.c:43: error: ‘aux’ undeclared (first use in this function)


Usaste o typedef mas continuas a usar o notasAed, quando devias usar notasAed1 ou struct notasAed.


n = trabalho -> trab;

Acho que o que querias era

n -> trabalho = trab;


Vê os erros que consegues eliminar, e outros pergunta aqui no fórum. Mas tenta colocar dúvidas sobre erros específicos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora