• Matéria: Informática
  • Autor: barbaraellen777
  • Perguntado 8 anos atrás

Como resolve este programa em C?19) Escreva um programa que leia certa quantidade de números e imprima o maior deles e quantas vezes o maior número foi lido. A quantidade de números a serem lidos deve ser fornecida pelo usuário.


Eu fiz assim mas n esta dando certo !

#include<stdio.h>
int main(){
int q=0;
int i,v[q],m=-10000;

printf("informe quantos valores voce ira digitar\n");
scanf("%d",&q);
printf("informe os valores\n");
scanf("%d",&v[q]);
for(i=0;i<q;i++)
{
   if(i>m) { 
   m==i; 
  i++;
}}
printf("O maior eh : %d",m);
 return 0;}

Respostas

respondido por: bokomoko
1
A declaração do vetor v[] deve conter uma constante. O número máximo que você vai ler. Recomendo algo como 20 assim

int i,v[20],m=-10000;

o comando de leitura dos dados que vão para o vetor devem estar dentro de um for, assim

for (i=0;i<q;i++) {
     scanf("%d",&v[q]);
}

Depois tem o for para comparar quem é o maior (segundo for, supondo que foi feito um primeiro for para ler q elementos)

Dentro do for tem um if e ele está errado

Observe, o for varia i de 0 até q e está correto

só que o if compara o i com o m, que supostamente seria o menor.
Só que a ideia é compara o v[i] e não o i
i é o valor de i, que vai variar de 0 a q
o que você comparar é o valor do vetor v na i-ésima posição

Do jeito que o programa está ele vai comparar 0, 1 , 2 , 3 e assim por diante com m. 
O que se pede é comparar v[0], v[1], v[2] ... até v[q]

Dentro do if, tem o comando m == i;
Esse comando está errado do ponto de vista lógico e sintático.

Primeiro que == não é o comando de atribuição e sim o operador de comparação de igualdade, ele deveria ser m = i; 
Na verdade nem isso, ele deveria ser m = v[i];

Outra coisa é que i está sendo incrementado. Não precisa se preocupar com isso pois o for incrementa o i automaticamente. Portanto o comando
i++ pode tem que ser removido

Agora tem uma coisa interessante nesse programa. Ele usa um truque muito bom para simplificar o código que é criar uma variável de comparação chamada "low tag" e coloca nela o valor -10000. Isso faz com que a primeira comparação, o v[0] se torne o menor valor e a partir daí seja comparado com outros até perder o lugar de "menor valor" para algum outro elemento do vetor. Essa parte ficou boa, ficou legal. Massa mesmo.


Então o programa correto eu faria assim (observe, não há uma forma só de fazer um programa)

#include<stdio.h>
int main(){
  int q=0;
  int i,v[20],m=-10000;

  while (q=0) { 
       printf("informe quantos valores voce ira digitar\n");
       scanf("%d",&q);
       if ( q>20 ) { 
              printf("Digite menos que 21 valores \n");
              q = 0; 
       }
  };

  printf("informe os valores\n");
  for(i=0;i<q;i++) {
       scanf("%d",&v[q]);
   }
  for(i=0;i<q;i++)   {
     if(v[i]>m) { 
         m=v[i];  
    } 
 }
 printf("O maior eh : %d",m);
 return 0;
}



barbaraellen777: Nossa muito obrigada !!valeu mesmo.
Perguntas similares