Ajuda no programa de C

n0ob

Membro
Olá=D...
Sou novato nisto...
Ao executar o seguinte código, este deixa de responder e fecha...

O objectivo do programa é pedir um numero de valores a introduzir e indicar o maximo, o minimo e a media...


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

main()
{

int n, i, max ,min, soma;
float media;
int vector[n];


printf("Indique o valor de numeros desejados: ");
scanf(" %d",&n);


for(i=0;i<n;i++)
{ printf("Coloque o valor desejado\n: ");
scanf(" %d", &vector); /*Corresponder a cada posição o valor introduzido*/

}
/*Suposições...*/

vector[0]=max;
vector[0]=min;

for(i=0;n<i;i++)
{
if(vector>vector[0])
/*Percorridos os numeros incluidos nos vectores para ver se existe
algum maior (para maximo) ou menos(para minimo)*/
max=vector;

if(vector<vector[0])

min=vector;

}

printf("Ora ai está o maximno ;) = %d\n",max);
printf("Ora ai está o minimo ;) = %d\n",min);


for(i=0, soma=0;n<i;i++)
{
soma=soma+vector;


}

media=(soma)/(n);

printf("Ora ai está a media ;_) = %f\n",media);

system("pause");

}
 
Boas,

Olha não é que perceba muito disto... mas não podes ter um vector com tamanho "n"... tens que definir um valor ou uma constante...

[]
 
for(i=0;n<i;i++)tu podes fazer o 1 array dessa forma, mas a variável tem de estar inicializada, o que não é o caso. Também tens alguns loops mal como este for(i = 0; n<i;i++). teria de ser for(i = 0; i < n; i++)
 
O problema mais "gritante" que está aí é mesmo a declaração int vector[n];
Não podes declarar um vector com um tamanho n que não está inicializado quando essa declaração é feita (e não te eskeças que o código é executado sequencialmente).
Aquilo que tens de fazer, e possivelmente ainda não aprendeste esta forma é: invés de declarares um int vector[n], declaras um ponteir char * vector;

Depois fazes o scanf para obter o n e, logo e seguida, como já tens o n, fazes vector = malloc(n * sizeof(int));
Assim ficas com um vector de tamanho n. Chama-se a isto alocação de memória dinâmica, e é boa prática libertar a memória que se aloca dinamicamente no final do programa, portanto, antes de fazer o exit no final/antes de fazeres system("pause");, convém fazeres free(vector);

Cumps
 
O problema mais "gritante" que está aí é mesmo a declaração int vector[n];
Não podes declarar um vector com um tamanho n que não está inicializado quando essa declaração é feita (e não te eskeças que o código é executado sequencialmente).
Aquilo que tens de fazer, e possivelmente ainda não aprendeste esta forma é: invés de declarares um int vector[n], declaras um ponteir char * vector;

Depois fazes o scanf para obter o n e, logo e seguida, como já tens o n, fazes vector = malloc(n * sizeof(int));
Assim ficas com um vector de tamanho n. Chama-se a isto alocação de memória dinâmica, e é boa prática libertar a memória que se aloca dinamicamente no final do programa, portanto, antes de fazer o exit no final/antes de fazeres system("pause");, convém fazeres free(vector);

Cumps

Desculpem o tamanho dos meus erros ;)
Mt obg pela dica da alocação da memoria
 
O problema mais "gritante" que está aí é mesmo a declaração int vector[n];
Não podes declarar um vector com um tamanho n que não está inicializado quando essa declaração é feita (e não te eskeças que o código é executado sequencialmente).
Não tem a ver com a altura onde a declaração é feita, todas as variáveis locais são alocadas no stack, e é necessário conhecer o seu tamanho em compile-time. A varíavel só vai ter um valor em run-time, logo isso é independente do local onde colocas o n.

PS: O standard C99 já permite VLA's (variable length arrays) onde podes definir um array com tamanho variável sem o alocar dinamicamente no heap.
 
Back
Topo