Jump to content

Recommended Posts

Posted

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.

Posted

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.

🙂

Posted

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.

Posted

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
Posted

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

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
×
×
  • 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.