Red_Beret Posted April 19, 2006 at 11:48 AM Report #22818 Posted April 19, 2006 at 11:48 AM Ppl, alguem me ajuda com este exercicio? http://img54.imageshack.us/img54/632/capturaecra7fh.png Fiz assim #include <stdio.h> #include<stdlib.h> int media=0, pos=0; void classe(int argc, char *argv[]){ int n=0; for(n=1;n<argc;n++){ media=media + atoi(argv[n]); if(atoi(argv[n])>=9.5) pos++; classe(argc, atoi(argv[n])); } media=media/argc; } void main(int argc, char *argv[100]){ int ct; if (argc==1){ printf("introduza os valores (introduza um valor negativo para terminar)\n"); do{ scanf("%d", &argv[ct]); ct++; }while(atoi(argv[ct])>-1); } classe(argc, *argv[argc]); printf("A média e %d.\n %d alunos tiveram nota positiva\n", media, pos); } Para variar, não funciona PS - Procedimento, é função sem return.
vbmaster Posted April 19, 2006 at 12:53 PM Report #22825 Posted April 19, 2006 at 12:53 PM Bem, normalmente se não sabes de onde vem o erro tens de ir por tentativas. Primeiro testas se os valores estão a ser correctamente recebidos na array, se estiverem é mais de meio caminho andado... Eu não posso ajudar muito pois só sei c++, mas o problema não é díficil.... 👍 A média faz-se somando todos os valores do array de divindo pelo númeor de elementos que este contem (não esquecendo que um array começa em 0). Já os alunos que tiverem negativa, é a medida que se correr a média, analizar a nota do aluno e caso seja nega, fazer um ++ noutra variável. 🙂
Red_Beret Posted April 19, 2006 at 01:01 PM Author Report #22830 Posted April 19, 2006 at 01:01 PM pois. mas o erro é mesmo no codigo. Tou a fazer isto no VS, e ele diz que não consegue converter não sei o que nas linhas classe(argc, atoi(argv[n]) e classe(argc, *argv[argc]
vbmaster Posted April 19, 2006 at 01:51 PM Report #22838 Posted April 19, 2006 at 01:51 PM Não terás de dar também tamanho ao apontadores para array na função classe?
brink@ero Posted April 19, 2006 at 03:05 PM Report #22845 Posted April 19, 2006 at 03:05 PM pois. mas o erro é mesmo no codigo. Tou a fazer isto no VS, e ele diz que não consegue converter não sei o que nas linhas classe(argc, atoi(argv[n]) e classe(argc, *argv[argc] Dá erro porque está a chamar a função assim: classe(argc, atoi(argv[n])); Em que no segundo parâmetro está um inteiro, mas declaraste que o segundo parâmetro era um vector char! void classe(int argc, char *argv[]) Ainda não olhei bem para o teu código, mas numa coisa reparei. Se estas a fazer uma chamada recursiva, isso por si só é um ciclo! Não percebo a utilidade do ciclo for 🙂 . Aconselho fazeres o programa sem a chamada recursiva, só com o ciclo for. Depois apagas o ciclo for e fazes o programa com chamada recursiva.
Red_Beret Posted April 19, 2006 at 03:23 PM Author Report #22847 Posted April 19, 2006 at 03:23 PM eu ja tinha tentado assim. (com inteiros, e sem o for, etc) #include <stdio.h> #include<stdlib.h> int media=0, pos=0; void classe(int argc, int argv[]){ int n=0; media=media + argv[n]; if(argv[n]>=9.5) pos++; classe(argc, argv[n+1]); media=media/argc; } void main(int argc, int argv[100]){ int ct; if (argc==1){ printf("introduza os valores (introduza um valor negativo para terminar)\n"); do{ scanf("%d", &argv[ct]); ct++; }while (argv[ct]>-1); } classe(argc, argv[argc]); printf("A média e %d.\n %d alunos tiveram nota positiva\n", media, pos); } Mas da exactamente os mesmos erros ? http://img456.imageshack.us/img456/6456/capturaecra0bt.th.png
brink@ero Posted April 19, 2006 at 03:53 PM Report #22857 Posted April 19, 2006 at 03:53 PM Eu estava a dizer para fazeres o código sem efectuares chamada recursiva, não ao contrário!! Se o teu programa não funciona sem a chamada recursiva, ou seja, só com um ciclo for, então com a chamada recursiva é que não funciona mesmo! Se estas a dar os primeiros passos em C, não vais logo de cabeça por uma chamada recursiva sem perceberes como funciona, por isso é que digo que deves por isso a funcionar de modo simples sem uma chamada recursiva. Eu fiz aqui um exemplo de uma chamada recursiva sem return. Tenta perceber como faço as coisas e vê o que o programa faz! #include <stdio.h> #include <stdlib.h> void classe(int dimensao, char **vector, int *soma, int *positivo, int i) { if(dimensao>0) { // e' so' para veres como isto funciona printf("%d- Parametro =\"%s\"\n",i, vector[i]); // fazes aqui as contas de somar e contar o numero de alunos com nota positiva // Nota: soma e positivo sao apontadores // Nota2: o primeiro argumento e' o nome do programa classe(--dimensao,vector,soma,positivo,++i); } } void main(int argc, char *argv[]) { int media=0, positivo=0, soma=0, n_alunos=0; classe(argc,argv,&soma,&positivo,0); // As restantes contas: o calculo da media printf("A média e %d.\n %d alunos tiveram nota positiva\n", media, positivo); }
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