Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con un programa en C

Estas en el tema de Problema con un programa en C en el foro de C/C++ en Foros del Web. Hola a todos estoy empezando a progamar en c y tengo una duda con un programa: EL programa te pregunta cuantos números vas a escribir, ...
  #1 (permalink)  
Antiguo 10/03/2010, 14:46
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Problema con un programa en C

Hola a todos estoy empezando a progamar en c y tengo una duda con un programa:
EL programa te pregunta cuantos números vas a escribir, después te pide que los escribas y devuelve el mayor de ellos.

En principio funciona bien pero si le dices por ejemplo que vas a introducir cuatro números e introduces tres no funciona a menos que escribas otro número.

¿Hay alguna manera de hacer que funcione si introduces menos datos de los que dijiste?

Código C:
Ver original
  1. /* Programa que usa la instrucción for. Se pide al usuario el número de datos y se determina el mayor de esos datos enteros
  2. */
  3.  
  4. # include <stdio.h>
  5. # include <stdlib.h> //Librería necesaria para el system ("pause")
  6.  
  7. int main ()
  8. {
  9.   int k;      //contador (controla el for)
  10.   int ndatos; //número de datos
  11.   int dato;   //valor a procesar
  12.   int ubi;    //Posición del dato mayor
  13.   int max;    //valor máximo
  14.    
  15.    printf ("\nDime la cantidad de datos: ");
  16.    scanf ("%d", &ndatos);
  17.    printf ("\nEscribe los datos: ");
  18.    max=dato;
  19.    for (k=1; k<=ndatos; k++)
  20.    {
  21.     scanf("%d", &dato);
  22.     if (dato>max)
  23.       {
  24.          max=dato;
  25.          ubi=k;
  26.       }
  27.    }
  28.    
  29.    printf ("\nEl maximo de los %d datos es %d ubicado en %d\n\n", ndatos, max, ubi);
  30.  
  31.    system ("pause"); //Para que no se cierre la ventana de dos en Dev-C++
  32.    return 0;
  33.        
  34. }
  #2 (permalink)  
Antiguo 10/03/2010, 16:15
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Respuesta: Problema con un programa en C

Podrías poner que el usuario ingrese -1 (por ejemplo) para finalizar la carga de datos, osea, si dijo que va a ingresar 4 datos pero en realidad eran 3, entonces pone -1 y termina... con un while lo podrías hacer....

Otra cosa, abajo del printf que pide los datos, en la linea 18 pusiste max=dato; osea, estas inicializando max con el valor de dato, pero a dato todavía no lo inicializaste, osea que le estas metiendo "basura" a la variable max... podes hacer dos cosas que se me ocurren ahora, poner un scanf("%d", &dato); asi:

Código C:
Ver original
  1. printf ("\nEscribe los datos: ");
  2.    scanf("%d", &dato); //linea agregada
  3.    max=dato;
  4.  
  5.    for (k=1; k<=ndatos; k++)
  6.  
  7.    {
  8.  
  9.     if (dato>max)
  10.  
  11.       {
  12.  
  13.          max=dato;
  14.  
  15.         ubi=k;
  16.  
  17.       }
  18.     scanf("%d", &dato); // linea agregada
  19.    }

o sino inicializar int dato=0; por ejemplo... asi cualquier numero que entre va a ser mas grande.


Saludos
  #3 (permalink)  
Antiguo 11/03/2010, 09:53
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con un programa en C

Gracias por tu respuesta Payaso73, pero yo me refería a que el programa de alguna forma detectara que se han introducido datos de menos y rellenara con números iguales al último dato.
Sin embargo no se me ocurre como implementarlo. Bueno, lo seguiré intentando.
  #4 (permalink)  
Antiguo 11/03/2010, 09:58
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Respuesta: Problema con un programa en C

Pero para que haces eso? osea, no los estas guardando en ningún lado a los datos que ingresan, solo controlas cual es mayor... y si ingresas 3 datos en vez de 4 y el programa copia el 3º numero en la ubicación del 4º, seria lo mismo, pero solo cambia la ubicación... pero bueno, cuando lo soluciones publicalo así vemos como quedo


Saludos
  #5 (permalink)  
Antiguo 11/03/2010, 10:52
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Problema con un programa en C

Al final he pasado de la instrucción for y he usado do...while y he hecho que el programa pare de leer números cuando lee un salto de linea o se llega al número de datos que dijo el usuario.

Código C:
Ver original
  1. /* Programa que pide al usuario los datos y se determina el mayor de esos datos enteros
  2. */
  3.  
  4. # include <stdio.h>
  5. # include <stdlib.h> //Librería necesaria para el system ("pause")
  6.  
  7. int main ()
  8. {
  9.   int dato;   //valor a procesar
  10.   int ubi;    //Posición del dato mayor
  11.   int max;    //valor máximo
  12.   int k=0;    //Sirve para contar los datos y hacer que el valor max se inicialize como el primer dato
  13.   char c;     //variable para detectar el salto de linea
  14.   int ndatos; //número de datos
  15.  
  16.   printf ("\nEscribe el numero de datos: ");
  17.   scanf("%d", &ndatos);
  18.   printf ("\nEscribe los datos: ");
  19.    
  20.    do
  21.    {
  22.     scanf("%d", &dato);
  23.     c=getchar (); //capta el caracter salto de linea para que se dejen de leer los datos
  24.     if (k==0)  //con esto el primer dato será tomado como máximo al principio
  25.       {
  26.        max=dato;
  27.        k++;
  28.        ubi=k;
  29.       }
  30.     else if (k>0 && dato>max)
  31.       {
  32.          max=dato;
  33.          k++;
  34.          ubi=k;
  35.       }
  36.     else
  37.       k++;
  38.    
  39.    }while (c!='\n' && k<ndatos); //cuando el programa lee un salto de linea o k es igual al número de datos el programa para de leer caracteres
  40.    
  41.    printf ("\nEl maximo de los %d datos es %d ubicado en %d\n\n", k, max, ubi);
  42.  
  43.    system ("pause"); //Para que no se cierre la ventana de dos en Dev-C++
  44.    return 0;
  45.        
  46. }

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:26.