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, ...
 
Antiguo 10/03/2010, 14:46
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 15 años, 8 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. }
 
Antiguo 10/03/2010, 16:15
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 16 años, 7 meses
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
 
Antiguo 11/03/2010, 09:53
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 15 años, 8 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.
 
Antiguo 11/03/2010, 09:58
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 16 años, 7 meses
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
 
Antiguo 11/03/2010, 10:52
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 15 años, 8 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 20:38.