Cypher Posted December 30, 2006 at 09:50 PM Report #73565 Posted December 30, 2006 at 09:50 PM Boas pessoal... tenho aqui um pequeno problema... passar uma matriz para outra que se encontra na função main() através de um return... #include<stdio.h> #define T_ALUNOS 50 float carregar(){ float turma[T_ALUNOS][2]; int i,j; for (i=0;i<T_ALUNOS;i++){ for(j=0;j<2;j++){ if (j==0){ printf("Introduza o seu numero: "); scanf("%f",&turma[i][j]); } else{ printf("Introduza a sua nota: "); scanf("%f",&turma[i][j]); } } } return turma; } multi(float vturma[T_ALUNOS][2]){ int i,j,amax,amin; float soma,nmax,nmin; nmax=vturma[0][1]; nmin=vturma[0][1]; amax=vturma[0][0]; amin=vturma[0][0]; soma=vturma[0][1]; for (i=1;i<T_ALUNOS;i++){ if (nmin>vturma[i][1]){ nmin=vturma[i][1]; amin=vturma[i][0]; } if (nmax<vturma[i][1]){ nmax=vturma[i][1]; amax=vturma[i][0]; } soma=soma+vturma[i][1]; } printf("O aluno nº %d tem a nota maxima de %.2f valores.\n",amax,nmax); printf("O aluno nº %d tem a nota minima de %.2f valores.\n",amin,nmin); printf("A média da turma é %.2f valores.\n",soma/T_ALUNOS); printf("A diferença entre a nota maxima e minima é %.2f valores.\n",nmax-nmin); } menu(){ printf("1-preencher o vector\n"); printf("2- ver medias, melhor, pior, mellhor note, pior nota e diferença entre notas\n"); printf("escolha um numero: "); } main(){ int op; float vectaux[T_ALUNOS][2]; menu(); scanf("%d",&op); switch(op){ case 1: vectaux=carregar(); case 2: multi (vectaux); default: printf("Escolhe outra \n"); } } o caso é o seguinte o utilizador escolhe qual a opção... mas se escolher a segunda a matriz ainda não está carregada, ou seja temos que introduzir primeiros os valores na matri, que é a opção 1 tenho que carregar a matriz com os numero do aluno e com a sua nota... ate ai tudo bem eu leio esses dados e envios para uma matriz local da função "carregar" so que para depois conseguir enviar os dados para a função "multi" tenho que enviar a matriz carregada para o main e a partir dai enviala para a função "multi" so que esta me a dar um erro na função carregar, mais precisamente no return turma; cumps...
Hipnoted Posted December 30, 2006 at 09:55 PM Report #73567 Posted December 30, 2006 at 09:55 PM Tu não podes retornar um array. Aliás, há forma de fazer isso mas envolve apontadores e penso que ainda não deste isso. Podias declarar as variáveis necessárias globalmente, tratando assim na função carregar de carregar os dados para essa variável. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Rui Carlos Posted December 30, 2006 at 09:57 PM Report #73568 Posted December 30, 2006 at 09:57 PM passa a matriz 'vectaux' como argumento da função 'carregar'. depois na função carregar em vez de criares uma nova matrix, colocas os valores na matrix que recebeste como argumento. Rui Carlos Gonçalves
Cypher Posted December 30, 2006 at 10:04 PM Author Report #73569 Posted December 30, 2006 at 10:04 PM então iria ter isto #include<stdio.h> #define T_ALUNOS 50 float carregar(float vectaux[T_ALUNOS][2]){ int i,j; for (i=0;i<T_ALUNOS;i++){ for(j=0;j<2;j++){ if (j==0){ printf("Introduza o seu numero: "); scanf("%f",&vectaux[i][j]); } else{ printf("Introduza a sua nota: "); scanf("%f",&vectaux[i][j]); } } } return vectaux; } . . . main(){ int op; float vectaux[T_ALUNOS][2]; menu(); scanf("%d",&op); switch(op){ case 1: vectaux=carregar(vectaux); case 2: multi (vectaux); default: printf("Escolhe outra \n"); } } Rui Carlos era assim que te estas a referir??
Rui Carlos Posted December 30, 2006 at 10:06 PM Report #73570 Posted December 30, 2006 at 10:06 PM aqui case 1: vectaux=carregar(vectaux) devias ter apenas case 1: carregar(vectaux) de resto, acho que está correcto. Rui Carlos Gonçalves
Cypher Posted December 30, 2006 at 10:17 PM Author Report #73572 Posted December 30, 2006 at 10:17 PM desta maneira #include<stdio.h> #define T_ALUNOS 50 float carregar(float vectaux[T_ALUNOS][2]){ int i,j; for (i=0;i<T_ALUNOS;i++){ for(j=0;j<2;j++){ if (j==0){ printf("Introduza o seu numero: "); scanf("%f",&vectaux[i][j]); } else{ printf("Introduza a sua nota: "); scanf("%f",&vectaux[i][j]); } } } return vectaux; } . . . main(){ int op; float vectaux[T_ALUNOS][2]; menu(); scanf("%d",&op); switch(op){ case 1: carregar(vectaux); case 2: multi (vectaux); default: printf("Escolhe outra \n"); } } dá erro no return ?
Rui Carlos Posted December 30, 2006 at 10:18 PM Report #73574 Posted December 30, 2006 at 10:18 PM já não precisas de retornar nada. declara a função como void. Rui Carlos Gonçalves
Cypher Posted December 30, 2006 at 10:51 PM Author Report #73578 Posted December 30, 2006 at 10:51 PM e so com variaveis locais ? Não dá para fazer este exercicio??
Warrior Posted December 30, 2006 at 11:05 PM Report #73581 Posted December 30, 2006 at 11:05 PM Dá, através de apontadores. Mas eu não me meteria por aí se não tivesse experiência.. Tenta primeiro fazer o mesmo com um vector, e só depois passar para uma matriz. Tens o problema que C só te permite retornar um tipo de dados (a menos que retornes uma estrutura, também é possível) mas tu precisas de saber 2: o primeiro elemento do vector, e o tamanho do vector. Logo, podes passar o tamanho por referência e retornar somente o apontador para a primeira posição. Ficaria algo assim: (sem testar) void ler(int *v,int *n) { int i; scanf("%d",n); for (i=0;i<(*n);i++) scanf("%d",&v[i]); } int main() { int v[10],n; ler(v,&n); return 0; } Ou como alternativa à função ler: Chamas n = ler(v); int ler(int *v) { int i,n; scanf("%d",&n); for (i=0;i<n;i++) scanf("%d";&v[i]); return n; } NÃO TESTEI.
Cypher Posted December 30, 2006 at 11:13 PM Author Report #73583 Posted December 30, 2006 at 11:13 PM mas não serve sry... tenho mesmo que utilizar uma matriz!
Rui Carlos Posted December 30, 2006 at 11:44 PM Report #73589 Posted December 30, 2006 at 11:44 PM e so com variaveis locais ? Não dá para fazer este exercicio?? na solução que te indiquei só são usadas variáveis locais!!! Rui Carlos Gonçalves
Warrior Posted December 31, 2006 at 12:34 AM Report #73607 Posted December 31, 2006 at 12:34 AM mas não serve sry... tenho mesmo que utilizar uma matriz! Dei-te um exemplo com vector, para tu próprio o passares para matriz. Hint: matriz = vector de vectores
Cypher Posted December 31, 2006 at 01:01 AM Author Report #73622 Posted December 31, 2006 at 01:01 AM thx mais uma vez. Problema resolvido !.. vou deixar tal como o Rui Carlos me mostrou!
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