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;}
Soluções para a tarefa
Respondido por
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;
}
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 interessantes
Ed. Física,
10 meses atrás
História,
10 meses atrás
Matemática,
10 meses atrás
Física,
1 ano atrás
Matemática,
1 ano atrás
Matemática,
1 ano atrás
Matemática,
1 ano atrás