Ir ao conteúdo
  • Cadastre-se

Ajuda no algoritmo


Renanzinthhh

Posts recomendados

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;	}
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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;	}
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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;	}
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!