Ir ao conteúdo

Posts recomendados

Postado

Estava fazendo alguns exercicio aqui da apostila até chegar nesse e não consegui, alguém ajuda?

#include <stdio.h>#include <stdlib.h>	int main(){				int qntN, i, x;		float n[qntN], maiorNota = n[0];		printf("Digite a quantidade de notas: ");		scanf("%d", &qntN);		for (i=0; i<qntN; i++) {			printf("Digite a nota %d: ", i+1);			scanf("%f", &n[x]);			}				for (i=0; i<qntN; i++) {					if(n[x] > maiorNota) {						maiorNota = n[x];					}				}				printf("A maior nota e: %.2f", maiorNota);		system("pause");		return 0;	}
Postado

Olá!

 

Olha dei uma olhada rapida no codigo . . .

 

 

- |16|warning: ‘x’ may be used uninitialized in this function – nesta parte esse alerta está dizendo que você declarou e está usando uma variável cujo valor não foi iniciado ate o momento de sua utilizacao, podendo ocorrer os mais diversos problemas no código, aqui este alerta desapareceu assim que iniciei a variavel com um valor qualquer ex: 0

 

- Com relação ao seus laços for, da maneira que você quer fazer o ideal é o de que cada laço tenha uma variável propria associado a ele.

 

- Com relação a variável " i ", isto também é importante pois, a mesma variável que você usou em seus laços for é a mesma que vai indicar a posição? do numero que está para entrar ( 1ª, 2ª, notas ), sem contar que pelo menos aqui ocorreu de a variável " i " usar lixo de memoria, por isso é sempre importante você iniciarlizar as suas variáveis com algum valor, mesmo que 0, e dedicar uma variavel esclusivamente para cada tarefa.

 

- além disso, nos seus laços for, você colocou a variável errada para os seus vetores, [ x ], quando neste seu caso seria [ i ], sem se esquecer do que lhe disse acima sobre a forma como voce usou as suas variaveis.

 

Fiz as devidas correções que citei acima e o codigo ficou assim:

#include <stdio.h>#include <stdlib.h>int main(){   int qntN = 0;   int p = 0;   int i = 0;   int r = 0;   float n [ qntN ];   float maiorNota = n [ 0 ];   printf("Digite a quantidade de notas: ");   scanf("%d", &qntN);   for ( r = 0; r < qntN; r++ )      {         printf ( "Digite a nota %d: ", i + 1 );         scanf ( "%f", &n [ r ] );      }   for ( p = 0; p < qntN; p++ )      {	 if ( n [ p ] > maiorNota )           {	      maiorNota = n [ p ];	   }      }   printf("A maior nota e: %.2f", maiorNota);   getchar();   return 0;}

- Outra coisa, com relação ao system("pause"); ela é uma funcao que faz chamadas a componentes do sistema, por isso o ideal é voce evitar fazer este tipo de chamada, a não ser que seja realmente necessario, se a sua intenção era o de evitar que a tela do programa se fechasse, voce pode usar o getchar(); como fiz acima.

 

- Pelo que parece o codigo parece funcionar

 

 

Bom por hora é só, veja se as dicas acima funcionam . . .

 

 

Ubuntu 14.04  GNU GCC 4.8  CodeBlocks 13.12

 

 

Espero Ter AJudado ! ! !

Postado

Deixa, foi erro meu, desculpa!

Mas uma dúvida.

 

se eu declaro que:

 

float n [ qntN ];

 

então o tamanho do meu vetor vai ser em relação ao que eu digitar para: 

 

scanf("%d", &qntN);

 

correto?

Postado

Oi de novo . . .

 

Olha tentei executar o codigo só que desta vez emulando o codigo via wine, e ele funcionou legal . . . apenas observando que usei a IDE codeblocks.

 

Com relação ao codigo deixei passar está parte:  float maiorNota = n [ 0 ]; eu a mudei para float maiorNota; e o codigo funciona nomalmente acho que pode ser esse o problema, mas acho difícil . . .

Postado

Deixa, foi erro meu, desculpa!

Mas uma dúvida.

 

se eu declaro que:

 

float n [ qntN ];

 

então o tamanho do meu vetor vai ser em relação ao que eu digitar para: 

 

scanf("%d", &qntN);

 

correto?

Postado

Olá!

 

Olha executei o codigo aqui atraves do depurador, mas pelo que pude ver não, pelo menos não apareceu o numero de posições relativos ao valor que eu inserir, por hora parece que apenas colocando a quantidade diretamente ao declarar o vetor ex: float n [ 3 ];

 

Eu já consegui fazer algo similar ao que você tá dizendo, mas agora não me lembro bem como, talvez se me surgir alguma luz eu poste algo hoje, senão amanha . . .

 

 

Obs.: Pelo que vi aqui os valores parecem estar sendo armazenados cada um em uma posição especifica propria de memoria, pois acredito que caso contrario o programa não calcularia corretamente, mas exatamente o que está acontecendo eu não faço a memor ideia . . . porque aqui a IDE durante o processo de depuração não me mostra onde os valores que são introduzidos estão sendo armazenados no vetor.

 

Sem contar que sou INiciante em Programação . . .

 

 

Bom só posso ir ate aqui . . .

 

 

Espero Ter Ajudado ! ! !

  • Curtir 1
Postado

Aproveitando o tópico:

Resolvi criar um algorítmo aqui que surgiu da minha cabeça, sendo que não to sabendo fazer a parte para tirar a média do aluno, pode me ajudar?

#include <stdio.h>#include <stdio.h>	int main(){				char nome[30];		int qntN, i = 0, x = 0;		float n[x], media = n[0];				printf("Infome o nome do aluno: ");		gets(nome);		printf("Informe a quantidade de notas do %s: ", nome);		scanf("%d", &qntN);			for (i=0; i<qntN; i++)		{			printf("Informe a nota da prova %d: ", i+1);			scanf("%f", &n[x]);		}	for (i=0; i<qntN; i++)		{			media/=n[x];		}		printf("A media do aluno e: %f", media);	getchar();	return 0;	}
Postado

Olá!

 

Olha as mesmas observações que citei acima valem aqui, só fiz umas alterações aqui e outra ali:

#include <stdio.h>#include <stdio.h>int main()    {        char nome [ 30 ];        int qntN = 0;        int i = 1;        int v = 0;        int z = 0;        float n [ qntN ];        float media = 0;        printf ( "\nInfome o nome do aluno: " );        scanf ( "%s", nome );        printf ( "\nInforme a quantidade de notas do %s: ", nome );        scanf ( "%d", &qntN );    for ( v = 0; v < qntN; v++ )       {          printf ( "\nInforme a nota da prova %d: ", i );          scanf ( "%f", &n [ v ] );          i++;       }    for ( z = 0; z < qntN; z++ )       {            media = media + n [ z ];       }        media = media / qntN;        printf ( "\nA media do aluno e: %f\n", media );        getchar();        return 0;    }

- Com relação aos dois alertas seguintes, eles estão relacionados a função gets(), ela possui alguns problemas que podem causar problemas no codigo, acho melhor você não usa-la, e buscar sobre estes problemas antes de continuar . . .

 

 

|11|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638)

 

|11|aviso: the `gets' function is dangerous and should not be used.|

 

 

Atualizando . . .

 

 

Espero ter Ajudado ! ! !

Postado

Então, to ligado!

Reparei que você usa variáveis diferentes para cada tipo de coisa, isso é questão de gosto seu ou viu em alguma fonte que isso é recomendável?

Pois na facul prof não falou nada sobre isso...

 

Enfim, a parte q eu tinha errado do código era a fórmula da média la em baixo e na declaração do float media = n[0];

para float media = 0;

 

de resto, ok.

#include <stdio.h>#include <stdio.h>	int main(){				char nome[30];		int qntN, i = 0, x = 0;		float n[x], media = 0;				printf("Infome o nome do aluno: ");		gets(nome);		printf("Informe a quantidade de notas do %s: ", nome);		scanf("%d", &qntN);			for (i=0; i<qntN; i++)		{			printf("Informe a nota da prova %d: ", i+1);			scanf("%f", &n[x]);		}	for (i=0; i<qntN; i++)		{			media+=n[x];		}				media = media/qntN;				printf("A media do aluno e: %.2f", media);	getchar();	return 0;	}
Postado

Na verdade são as duas coisas, eu não me lembro agora de onde eu li isto, mas só sei que dizia que para os iniciantes em programação e mesmo os mais experientes, era melhor deixar tudo bem separado e organizado, pelo menos durante a parte de desenvolvimento inicial do codigo, e só mais tarde tentar deixar o codigo mais enxuto.

 

Exemplo:

for ( v = 0; v < qntN; v++ )       {          printf ( "\nInforme a nota da prova %d: ", i );          scanf ( "%f", &n [ v ] );          i++;          media = media + n [ v ];       }
  • Curtir 1
Postado

Bom dia!

Caras , estes vetor float me deixou preocupado, parcialmente acho que ele está errado em sua declaração.

Seria bem mais seguro se você o declarasse (o vetor) apenas depois de ter o tamanho..

Pesquise por; VLA - Variable Length Array

  • Curtir 1
Postado

Bom dia!

Caras , estes vetor float me deixou preocupado, parcialmente acho que ele está errado em sua declaração.

Seria bem mais seguro se você o declarasse (o vetor) apenas depois de ter o tamanho..

Pesquise por; VLA - Variable Length Array

Declarado dessa forma, qual seria a preocupação em relação ao erro?

Aqui ocorreu tudo como esperado com o algoritmo.

  • Curtir 1
Postado

Declarado dessa forma, qual seria a preocupação em relação ao erro?

Aqui ocorreu tudo como esperado com o algoritmo.

No algoritmo não, no código aí sim. O erro ocorreu aqui, o que acontece é que o vetor está acessando locais na memória de outros aplicativos erro: 0x0000005c acesso violado a memória, óbvio vetor float iniciado com 0 de tamanho é um objeto ponteiro[emoji19].

Sempre isso vai ocorrer no meu caso, como tenho muitas mídias aberta foi fácil notar o erro de semântica, pois o windows exibiu a janela de erro e clicando em detalhes ficou claro.

Boa noite.

Tapatalk Mobile

  • Curtir 1
Postado

Você entendeu? 

Renanzinthhh

para melhor ilustrar use o operado sizeof no vetor.

Assim:

#include <stdio.h>int main (void) {   int x = 0;     /**< Zero é nulo. */   float vt[x];   /**< Vetor de tamanho Zero também é nulo. */      printf ("SizeOf is: %u\n", sizeof vt); /**< Resultado 0 */   return 0;   }

Agora observe sobre a perspectiva do VLA - Variable Length Array:

/** @authr Mauro Britivaldo*  License all free on edition and published */#include <stdio.h>int main (void) {   int x = 0;     /**< Zero é nulo. */      printf ("OI: Entre com numero inteiro: ");      while ( !scanf (" %d", &x) )           /**< Força o input de um INT */         (void)getchar ();      float vt[x];                           /**< VLA: quantidade é x-variável */      printf ("SizeOf is: %u bytes\n", sizeof vt); /**< Resultado x mult float */   return 0;   }

Edit: Se tem haver com seu problema? 70% que sim!

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...