• Domingo 15 de Diciembre de 2024, 13:28

Autor Tema:  Otro Mas  (Leído 1084 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Otro Mas
« en: Miércoles 21 de Septiembre de 2005, 21:53 »
0
Código: Text
  1. /*Escribir un programa que permita agregar nº enteros a una lista de números aceptada por teclado. El programa pregunta si debe agregar al principio, al
  2. final o en el medio y agrega el elemento a la lista.*/
  3. #include <stdio.h>
  4. #include <windows.h>
  5. int iArray[10],iCon;
  6. //int iMed,iIni,iFin;
  7. int inicio(int iVal)
  8. {
  9.  iArray[0]=iVal;
  10.  return 1;
  11. }
  12. int medio(int iVal)//funcion sin comenzar
  13. {
  14.  iArray[9/2]=iVal;
  15.  return 1;
  16. }
  17. int final(int iVal)
  18. {
  19.  iArray[9]=iVal;
  20.  return 1;
  21. }
  22. void mostrar()
  23. {
  24.  for(iCon=0;iCon<=9;iCon++)
  25.  {
  26.   printf("%d\n",iArray[iCon]);
  27.  }    
  28. }
  29. int main(void)
  30. {
  31.  int op;
  32. // iArray[2,8,6];
  33.  for(iCon=0;iCon<=9;iCon++)
  34.  {
  35.   printf("Digita %d numero: ",iCon+1);
  36.   scanf("%d",&iArray[iCon]);
  37.   printf("Posicion \n1(Principio) \n2(Medio) \n3(Final) \n4(Mostrar) \nEscoger: ");
  38.   scanf("%d",&op);
  39.   switch(op)
  40.   {
  41.    case 1: inicio(iArray[iCon]);
  42.         break;
  43.    case 2: medio(iArray[iCon]);
  44.         break;
  45.    case 3: final(iArray[iCon]);
  46.         break;          
  47.    case 4: mostrar();
  48.   }
  49.  }
  50.  mostrar();
  51.  Sleep(2000);
  52. }
  53.  
Lo que pasa es que lo unico que arregla es el ultimo valor que agregue, osea, sin lo pongo a inicio o a final, pero los primeros que coloco nada, no los acomoda.
El pasado son solo recuerdos, el futuro son solo sueños

scullyERA

  • Miembro activo
  • **
  • Mensajes: 42
  • Nacionalidad: 00
    • Ver Perfil
Re: Otro Mas
« Respuesta #1 en: Martes 8 de Noviembre de 2005, 15:40 »
0
Primero estas guardando desde la funcion main () directamente en el vector en la posicion "iCon":
Código: Text
  1.      scanf ("%d", &iArray [iCon]);
  2.  
y despues estas duplicando el valor al guardarlo, segun la función a la que llamas, en el primer espacio, en el ultimo espacio o a la mitad del vector. [/color]

Sol. Lo que debes hacer es guardar en una variable entera aparte el valor introducido y luego este pasarlo como parametro a cada funcion:
Código: Text
  1.      inicio (num), medio (num) y final (num).
  2.  
[/color]

2do. Dentro de cada una de las 3 funciones anteriores siempre guardas en el mismo espacio cada vez que las llamas, por ejemplo:
en la 1era llamada a inicio (), guardas el valor en la posicion 0 del vector y en la 2da llamada a inicio (), vuelves a guardar el nuevo valor en la posicion 0 del vector, así que el 1ero que estaba se pierde pues sobreescribes en él.


Sol. Para guardar al final o al inicio debes recorrer los datos a los espacios vacios y asi dejar el espacio inicial o final, segun sea el caso, libre para guardar el nuevo dato. En la funcion medio () te recomiendo que uses un contador para indicar especificamente en que posicion del vector desea guardar el nuevo dato (tambien es necesario recorrer los datos ya existentes).

3ro. En la funcion mostrar () estas usando el contador "iCon" y como lo modificas en dicha funcion, al regresar a la funcion main () ya tiene un valor mayor a 9 y sale del ciclo principal

Sol. declara un contador local diferente a "iCon" en la funcion mostrar () y asi no alteras el valor de la variable global "iCon".

SI KIERES ORDENAR, MEJOR INTRODUCE TODOS LOS DATOS TAL CUAL Y LUEGO USAS CUALQUIER ALGORITMO DE ORDENACION