Problema de C (Ayuda)

Obtener un algoritmo que corresponda a un programa que lea una lista de números introducidos de manera consecutiva y aleatoria hasta que el valor introducido sea un cero.

Calcular la suma de todos los valores introducidos antes de que aparezca el primero mayor de 200. Por otra parte, sumar el resto de valores introducidos hasta que se introduzca el cero. Por último visualizará el número de datos introducidos, sin contar el cero, y las dos sumas realizadas.

Contemplar la posibilidad de que se introduzca antes el valor cero que cualquier número mayor de 200.

Muchas gracias! ;)
1.- Eso es calderilla
2.- Si preguntas cosas mas concretas, te ayudo. Si planteas un pseudocódigo me lo miro y te comento que creo que se puede mejorar, pero no tiene sentido que te lo demos listo para compilar.
Imagino que más o menos vendría a ser esto:

Resultado1=0:
Resultado2=0;
intruducir = X;
for (X!=0)
si (X=>200)
Resultado2=Resultado2+X;
sino
Resultado1=Resultado1+X;
finsi
intruducir = X;
finfor

Mostrarpantalla("Resultado mayor que 200 5d",Resultado2);
Mostrarpantalla("Resultado números menores 200 %d",Resultado1

No te voy a poner todo el código como es normal, ya que el problema no es muy complicado, piensa las cosas que lo sacas. Ese pseudo código te vendrá a dar una idea.
no se que estas estudiando tio... imagino que informatica... pero es tan realmente sencillo que deberias hacerlo tu mismo....

No me acuerdo de la sintaxis de C pero seria algo como hacer un bucle hasta que el readline sea 0, almacenar todo lo que vas leyendo en un array de integers (por ejemplo), luego haces un bucle que lo recorra y sume sus posiciones hasta que des con el 0 que seria la final o des con un numero mayor que 200 en ese caso seguirias sumando las restantes posiciones del array en otra variable....

al final muestras todo por pantalla.

Un saludet
Aquí lo tienes:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>


int main (int argv, char* argc[]){

int i, j, k=1;
char entrada[20];

printf("Programa .-. Enseña a hacer los deberes\n\nPulsa cualquier tecla e intro para continuar:");
scanf("%s",entrada);


printf("\n\n");
/*Bucle for anidado para enseñar a programar en C*/
for (i=0;i < 50; i++){
  for (j=0;j<50; j++){
     printf("%d No me gusta hacer los deberes de nadie, se mas concreto en tu pregunta\n",k);
     k++;
  }
}
}


Así someramente, guardalo compilalo con gcc -g -Wall practica.c -o practica y ejecutalo con ./practica (en el caso de linux)
JaguarSpen escribió:Obtener un algoritmo que corresponda a un programa que lea una lista de números introducidos de manera consecutiva y aleatoria hasta que el valor introducido sea un cero.

Calcular la suma de todos los valores introducidos antes de que aparezca el primero mayor de 200. Por otra parte, sumar el resto de valores introducidos hasta que se introduzca el cero. Por último visualizará el número de datos introducidos, sin contar el cero, y las dos sumas realizadas.

Contemplar la posibilidad de que se introduzca antes el valor cero que cualquier número mayor de 200.

Muchas gracias! ;)


Vale si te lo escribo no aprenderás pero al menos practica traduciendo del pseucódigo al código C [oki] :

X=1
Y=0
i=0
error=0
Crear Tabla[i]

Mientras (X <> 0) and ( Y < 201) Hacer:
leer(X)
Si X == 0 Entonces
error=1
BREAK
/* "break" es una instrucción que rompe un bucle... este sí es para contemplar el primer caso de primer valor introducido es igual a 0*/
END
Y=Y+X
tabla[i]=X
i++
Fin Mientras

Si error <> 1 ENTONCES
Escribir ("Ahora se procede a poner todos los números introducidos hasta ahora:")
Desde n==0 hasta n==i Hacer:
Escribir(Tabla[n])
Escribir(CARACTER INTRO)
/* Nota: Estas dos funciones escribir se pueden poner en 1 sóla en C te las pongo separadas en pseudocódigo para que lo comprendas */

Fin Desde
Fin Si

Fin programa...

Finalmente recordarte que existe una instrucción "mejor" que "mientras" para optimizar el pseudocódigo que te he pasado y así no tener que usar "BREAK"... te lo dejo para que lo pienses porque no olvides que un algoritmo es mejor que otro si es más eficiente...

En el que te paso y debe funcionar no es óptimo usar la sentencia "BREAK" y está puesta ahí por la cláusula que te dice de que contemples el paso de que el primer parámetro leido sea 0...

Pues bien como se puede ver el "si" que hay allí se ejecuta innecesariamente un número de veces (porque sólo sirve para la primera vez)... de tí depende remodelar el código para usar en lugar de "mientras" "REPETIR"...

No te lo doy todo hecho porque comprende que así no aprenderás pero te doy las ideas y el pseudocódigo para que avances.

No olvides NUNCA que en informática lo más importante NO ES QUE EL PROGRAMA FUNCIONE... (que es importante pero no del todo)... LO IMPORTANTE ES QUE FUNCIONE DE LA FORMA MÁS ÓPTIMA POSIBLE...

Recuerda que si Windows Falla (ahora menos desde XP) es gracias a que HAN OPTIMIZADO más el código que en sistemas anteriores. [oki]

Un saludo

BY DERHYUS.[chulito]
Aracem escribió:Aquí lo tienes:


mmm tio... no deberias de haberlo hecho, asi no hay manera de que aprenda... [noop]
Que pregunte dudas, o lo que sea, pero darselo todo mascado.....

Un saludet
(mensaje borrado)
^TxTeZ^ escribió:mmm tio... no deberias de haberlo hecho, asi no hay manera de que aprenda... [noop]
Que pregunte dudas, o lo que sea, pero darselo todo mascado.....
+1

Con cosas tan básicas y dándoselo todo en bandeja, a lo sumo pseudocógido para que trabaje y analice las cosas con detenimiento.

EDIT: Que me he leído lo que ha puesto Aracem, ¡qué jodío! [qmparto]
^TxTeZ^ escribió:
Aracem escribió:Aquí lo tienes:


mmm tio... no deberias de haberlo hecho, asi no hay manera de que aprenda... [noop]
Que pregunte dudas, o lo que sea, pero darselo todo mascado.....

Un saludet

No has leido el código que ha puesto... XD XD
Aracem escribió:...

¿eso se repite 50 veces, no? como lo de la pizarra jeje
destructor escribió:
Aracem escribió:...

¿eso se repite 50 veces, no? como lo de la pizarra jeje


No, se repite 2500 (50*50)
darix2006 escribió:
destructor escribió:
Aracem escribió:...

¿eso se repite 50 veces, no? como lo de la pizarra jeje


No, se repite 2500 (50*50)


Tenía que haberle puesto que se repitiera 50^50 XD
aver si alguien me ayuda con mi problema
#include<stdio.h>
#include<stdlib.h>
int main(){
   
    /* 1)
1) Decalrar un array de 20 enteros
2) Inicializar los valores s cero
3) Pedir por tecladdo lña 1 y 2 posición del array
4.-guardar en la 3 posiscion la suma de la 1º y 2º,
5) Mostrar la posición 5
6) Guardar en cada posicion los numeros pares a partir del 2
*/
int numero[20]={0};
int i=0;

printf("Introduce el primer numero:\n");
_flushall();
scanf("%i",&numero[0]);
printf("Introduce el segundo numero:\n");
_flushall();
scanf("%i",&numero[1]);
for(i=3;i<=20;i++)
{
                  if(i%2!=0)
                  {
                  numero[i]=i+1;  //Ponga lo que ponga pa sumarle tanto aqui como abajo
                  }                    // se me repiten los resultado (es evidente): 10, 10, 12, 12 ....
                  else
                  {
                  numero[i]=i+2;

                  }
}
for(i=3;i<=20;i++)
{                 
                                   printf("\n %i \n",numero[i]);
}
numero[2]=numero[0]+numero[1];
printf("La suma de la posicion 1 y 2 posicion es %i\nLa quinta posicion guarda %i\n",numero[2],numero[5]);


system("pause");

return 0;
}

al principio e puesto el enunciado, los 2 for los uso para el punto 6, ese punto me esta haciendo la vida imposible xD
Prueba a poner dos bucles for anidados, el primero para ir avanzando dentro del array y el segundo para ir escribiendo los pares, y pon q te lo escriba cuando i%2=0.

Salu2
14 respuestas