1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda no programa de C

Discussão em 'Programação' iniciada por n0ob, 9 de Maio de 2012. (Respostas: 5; Visualizações: 791)

  1. 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");

    }
     
  2. sadmam

    sadmam Power Member

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

    []
     
  3. Ace-_Ventura

    Ace-_Ventura Power Member

    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++)
     
  4. mauro1855

    mauro1855 I'm cool cuz I Fold

    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
     
  5. Desculpem o tamanho dos meus erros ;)
    Mt obg pela dica da alocação da memoria
     
  6. Kemosabe-TBC

    Kemosabe-TBC Power Member

    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.
     

Partilhar esta Página