Melhorando um Código em C

iae Galera,
estou com um exercicio da facul! ja fiz e esta pronto! rodando na gambiara
mais acho q da para melhorar, mais nao consegui colocar em 2 laços de repetição para ficar padronizado
alguém pode me ajudar ?

o Enunciado é o seguinte:
Escreva um programa para ler vários números até que a soma dos numeros lidos seja maior que 50. considere que não é permitida a entrada de mais de 50 números.
seu algoritmo deve parar quando uma dessas condições for atingida. A saida do programa deve ser a quantidade de números lidos e a palavra “SIM” somente quando a soma dos números for maior que 50 e “Não” caso contrário.

[code]#include <stdio.h>
int main ()
{ int i,soma, aux, vet[50];
i=0;
soma=0;
aux=1;
while (aux<50)
{ if (i<50)
{ printf(“Digite um Número: “);
scanf (”%d”,& vet[i]);
soma=soma+vet[i];
aux=soma;
i=i+1;
}
else
aux =aux +50;
}
printf(" Quantidade de numeros lidos : %d\n", i);
if (soma >= 50)
printf(“Sim\n”);
else
{ printf(“NÃo\n”);
}

return 0;
}
[/code]

Oi Michell.
Ao que eu vi, somente falta um || (ou) no seu while para satisfazer o problema. Você utiliza a variavél ‘i’ para contar cada número de entrada, pois então, com ele tu sabe se o usuário já digitou os 50 números, portanto:

Certo?
Enquanto a variavél ‘aux’ for menor ou igual a 50 OU a variavél ‘i’ for menor ou igual a 50, permanece em loop.
Se a soma atingir 50, ele encerra o loop OU se o usuário digitar 50 números, também encerra. Eu coloquei menor ou igual a 50 pois entendo que seja a partir de 51, que ele deve encerrar o loop. Supri sua necessidade ?

Abraços.

[quote=Michell Scherer]iae Galera,
estou com um exercicio da facul! ja fiz e esta pronto! rodando na gambiara
mais acho q da para melhorar, mais nao consegui colocar em 2 laços de repetição para ficar padronizado
alguém pode me ajudar ?

o Enunciado é o seguinte:
Escreva um programa para ler vários números até que a soma dos numeros lidos seja maior que 50. considere que não é permitida a entrada de mais de 50 números.
seu algoritmo deve parar quando uma dessas condições for atingida. A saida do programa deve ser a quantidade de números lidos e a palavra “SIM” somente quando a soma dos números for maior que 50 e “Não” caso contrário.

[code]#include <stdio.h>
int main ()
{ int i,soma, aux, vet[50];
i=0;
soma=0;
aux=1;
while (aux<50)
{ if (i<50)
{ printf(“Digite um Número: “);
scanf (”%d”,& vet[i]);
soma=soma+vet[i];
aux=soma;
i=i+1;
}
else
aux =aux +50;
}
printf(" Quantidade de numeros lidos : %d\n", i);
if (soma >= 50)
printf(“Sim\n”);
else
{ printf(“NÃo\n”);
}

return 0;
}
[/code][/quote]

Alterando de acordo com o que eu disse:

[code]#include <stdio.h>
int main ()
{ int i,soma, vet[50];
i=0;
soma=0;
while (soma<=50 || i<=50)
{ printf(“Digite um Número: “);
scanf (”%d”,& vet[i]);
soma=soma+vet[i];
i=i+1;
}
}
printf(" Quantidade de numeros lidos : %d\n", i);
if (soma >= 50)
printf(“Sim\n”);
else
{ printf(“NÃo\n”);
}

return 0;
}
[/code]

E vendo com calma, não precisa do aux.
Abraços.

acho que é só isso mesmo…

só vou dar uma dica,
Identação :smiley:

[quote=d34d_d3v1l]acho que é só isso mesmo…

só vou dar uma dica,
Identação :smiley:
[/quote]

Esqueci de dar essa dica a ele, é bem importante mesmo.
Só para exemplificar:

#include <stdio.h>  
int main ()  { 
    int i = 0;
    int soma = 0;
    int vet[50];  
    
    while (soma<=50 || i<=50) {
         println("Digite um Número: ");  
         scanf ("%d", &vet[i]);  
         
         soma=soma+vet[i];  
         i=i+1;  
    }         
    
    println(" Quantidade de numeros lidos : %d\n", i);  
    if (soma >= 50) {  
       printf("Sim\n");  
    } else {
       printf("NÃo\n");  
    }      
   return 0;      
}  

Acho que já melhorou.

perfeito.
abraços !

Galera a Lógica esta totalmente certa!
estou compilando pelo linux o seguinte erro

root@bt:~/Desktop/Michell UFMS/Lista 2# gcc -o test teste.c -Wall
root@bt:~/Desktop/Michell UFMS/Lista 2# ./teste
Segmentation fault
root@bt:~/Desktop/Michell UFMS/Lista 2#

alguem conhece esse erro ?

[quote=Michell Scherer]Galera a Lógica esta totalmente certa!
estou compilando pelo linux o seguinte erro

root@bt:~/Desktop/Michell UFMS/Lista 2# gcc -o test teste.c -Wall
root@bt:~/Desktop/Michell UFMS/Lista 2# ./teste
Segmentation fault
root@bt:~/Desktop/Michell UFMS/Lista 2#

alguem conhece esse erro ?[/quote]

A nível de curiosidade, substitua o println pelo printf como tinha antes. E o:

os printf eu ja tinha alterado, agora coloquei i++; e continuou o problema!

vi uma dica em outro forum, para eu testa em uma outra IDE
vou testar aqui!

[quote=Michell Scherer]os printf eu ja tinha alterado, agora coloquei i++; e continuou o problema!

vi uma dica em outro forum, para eu testa em uma outra IDE
vou testar aqui![/quote]

O i++ era apenas uma dica, não resolveria seu problema.
Isso, faça isso . E só quis ajudar na lógica, até porque entende muito pouco de C.

Abraços.

Se você define (em C, C++, Java ou C#) um array como int[50], ele vai de 0 até 49, não 50.

[quote=nel][quote=d34d_d3v1l]acho que é só isso mesmo…

só vou dar uma dica,
Identação :smiley:
[/quote]

Esqueci de dar essa dica a ele, é bem importante mesmo.
Só para exemplificar:

#include <stdio.h>  
int main ()  { 
    int i = 0;
    int soma = 0;
    int vet[50];  
    
    while (soma<=50 || i<50) {
         println("Digite um Número: ");  
         scanf ("%d", &vet[i]);  
         
         soma=soma+vet[i];  
         i++;
    }         
    
    println(" Quantidade de numeros lidos : %d\n", i);  
    if (soma >= 50) {  
       printf("Sim\n");  
    } else {
       printf("NÃo\n");  
    }      
   return 0;      
}  

Acho que já melhorou.[/quote]

Já arrumei o código, nem havia percebido o que o entanglement disse.

galera por motivos misticos não funfo!
vou deixar na gambiara mesmo kkkkkkkkkkk

esse while nao tah funcionando
ou ele faz um ou outro
ele nao sai do loop

mais obrgado ae galera

[quote=Michell Scherer]galera por motivos misticos não funfo!
vou deixar na gambiara mesmo kkkkkkkkkkk

esse while nao tah funcionando
ou ele faz um ou outro
ele nao sai do loop

mais obrgado ae galera[/quote]

Cara, totalmente bobeira minha, o correto é:

Como estava || (OU), ele fazia o seguinte:
A soma é maior que 50 ? Não, era para sair, mas ele faria o OU, i é menor que 50 ? Sim ! Então, fico no while. Entendeu?
Com o && (E) está resolvido, pois ambas as afirmações devem ser verdadeiras. Ou seja, se a soma for maior que 50, ele sai e o se já digitou mais de 50 numeros, também.
Senão, ele permanece em lopp. Testa ai,não precisa de “gambi” nao.

Abraços.