elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dar una salida en forma de lista en leguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Dar una salida en forma de lista en leguaje C  (Leído 5,394 veces)
ThronerAXE

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Dar una salida en forma de lista en leguaje C
« en: 15 Marzo 2013, 00:52 am »

Buenas.
Tengo la duda, o mejor dicho, nose como hacer esto. tengo que hacer un ejercicio en lenguaje C (utilizo el Builder) en donde debo dar una salida en forma de lista, pero los datos que deben salir en esa lista deben cumplir unas condiciones previamente. Tengo que usar arreglos unidimensionales. Queria saber si alguien me podria ilustrar con un ejemplo explicandome brevemente lo que se debe hacer, o si me pueden facilitar una guia donde expliquen este tema (dar una salida en forma de lista) gracias !


En línea

pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #1 en: 15 Marzo 2013, 01:05 am »

Dar una salida en forma de lista ¿Te refieres a algo asi?:

Código
  1. int arreglo[4] = {1,2,3,4,5};
  2.  
  3. for (int i = 0; i<4; i++)
  4.     printf("%d\n", arreglo[i]);
  5.  
  6.  

La salida en pantalla seria:
Código:
1
2
3
4
5


En línea

ThronerAXE

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #2 en: 15 Marzo 2013, 01:48 am »

algo asi, solamente que el arreglo que tengo que utilizar es una cadena de caracteres
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #3 en: 15 Marzo 2013, 02:30 am »

Tal cual, usas strlen para obtener el número de caracteres de la cadena.
En línea

ThronerAXE

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #4 en: 15 Marzo 2013, 02:45 am »

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5. #define MAX 30
  6.  
  7. void main()
  8. {
  9. int i=0;
  10. float deuda[MAX];
  11. char codigo[MAX][20],tipo[MAX],resp,clie_b[MAX];
  12. //Carga de los Vectores
  13. do
  14. { clrscr();
  15.   printf("\n\nIndique el codigo del Cliente: ");
  16.   scanf("%s",&codigo[i]);
  17.   printf("\n\nQue tipo de cliente es (B=Bueno, R=Regular, M=Malo)? ");
  18.   scanf("%c",&tipo[i]);
  19.   tipo[i]=toupper(getchar());
  20.   printf("\n\nIndique su deuda en Bolivares: ");
  21.   scanf("%f",&deuda[i]);
  22.     if(tipo[i]=='B' && deuda[i]<10000)
  23.     {strcmpi(clie_b[i],codigo[i]);
  24.      strlen(clie_b[i]);
  25.     }
  26.   printf("\n\nHay otro cliente?...S/N ");
  27.   scanf("%c",&resp);
  28.   resp=toupper(getchar());
  29. }while(resp=='S' && i<MAX);
  30. clrscr();
  31. printf("\n\nLos Clientes Buenos con deuda menor de 10000bs son %s\n"clie_b[MAX]);
  32. }

Esto es mas o menos lo que llevo, a partir de la linea 22 es donde no se como escribir el codigo para que me guarde las cadenas de caracter cumpliendo con las condiciones y luego mostrarlas todas en una salida, estuve leyendo un poco de la funcion strlen, pero me dice que lo que me da es la longitud de la cadena de caracteres, entonces no creo que me pueda servir
En línea

85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #5 en: 15 Marzo 2013, 02:57 am »

Todas juntas? cuando juntás varias cadenas en 1, eso se le dice 'concatenar cadenas'. Se hace normalmente con STRCAT. No se si es lo que requerís, pero te lo digo solamente..
« Última modificación: 15 Marzo 2013, 03:37 am por 85 » En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #6 en: 15 Marzo 2013, 11:19 am »

Creo que lo estas buscando es hacer un arreglo de cadenas. Por lo que veo en tu programa quieres imprimir por pantalla todos los clientes que cumplan dos condiciones; que sean buenos, y que tengan una deuda menor de 10.000. Estos clientes los guardas en el arreglo clie_b[MAX].

Cada cliente esta representado por una cadena pero tu arreglo es un arreglo de caracteres no de cadenas. Para ello cambia tu tipo de arreglo clie_b[MAX] a un arreglo de tipo bidimensional o mejor a un arreglo de punteros por ejemplo, en donde si podras almacenar cadenas:

Código
  1. /*arreglo de punteros*/
  2. char *clie_b[MAX];
  3.  
  4. /*comprobacion de condiciones y llenado del arreglo*/
  5. int cont = 0;
  6. if(tipo[i]=='B' && deuda[i]<10000)
  7.     strcpy(clie_b[cont++],codigo[i]);
  8.  
  9. /*y para evitar sorpresas terminamos de rellenar el arreglo */
  10.  
  11. while(cont != MAX)
  12.    clie_b[cont++] = '\0';
  13.  
  14.  
  15. /*Para imprimir los datos por pantalla*/
  16. for(int i=0; i <= MAX ; i++)
  17.       print("%s\n", clie_b[i]);
  18.  
  19.  
En línea

ThronerAXE

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #7 en: 17 Marzo 2013, 03:48 am »

ya me explicaron mas o menos como hacer para mostrar esas listas xd, tambien decidi reestructurar el codigo y hacerlo por partes para no enredarme mucho, este es 
Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #define MAX 30
  6.  
  7. //Carga de datos en los vectores
  8.  
  9. void main()
  10. {
  11. int cod[MAX],i=0,j,k,aux;
  12. float deuda[MAX],mayor=-1;
  13. char tipo[MAX],resp;
  14.  
  15.   do
  16.   { clrscr();
  17.     printf("\n\nIngrese el codigo del cliente: ");
  18.     scanf("%d",&cod[i]);
  19.     printf("\n\nIngrese el tipo de cliente(B=Bueno,R=Regular,M=Malo): ");
  20.     scanf("%c",&tipo[i]);
  21.      tipo[i]=toupper(getchar());
  22.     printf("\n\nIngrese el saldo deudor en bolivares: ");
  23.     scanf("%f",&deuda[i]);
  24.     printf("\n\nHay otro cliente...S/N? ");
  25.     scanf("%c",&resp);
  26.     resp=toupper(getchar());
  27.     i++;
  28.   }while(resp=='S' && i<MAX);
  29. //Listar los codigos de los clientes buenos
  30. printf("\n\nClientes Buenos con deuda menor a 10000 bs");
  31. printf("\n\nCodigo del cliente");
  32.  for(j=0;j<MAX;j++)
  33.  { if(tipo[j]=='B' && deuda[j]<10000)
  34.    printf("\n\n%d",cod[j]);
  35.  }
  36.  getch();
  37. //Mostrar el codigo de los clientes malos
  38.  
  39. for(k=0;k<MAX;k++)
  40. { if(tipo[k]=='M' && deuda[k]>mayor)
  41.     mayor=deuda[k];
  42.     aux=cod[k];
  43. }
  44. printf("\n\nEl codigo de cliente que tiene la mayor dueda de tipo MALO es %d",aux);
  45. getch();
  46.  
  47. }

tengo un problema tratando de mostrar la salida del cliente malo, resulta que al compilar, y meter el codigo(entero), cuando me da la salida, me da otro numero diferente ¿por que pasa eso?
En línea

pacoperico

Desconectado Desconectado

Mensajes: 100


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #8 en: 17 Marzo 2013, 11:20 am »

En la parte final de tu codigo:

Código
  1. //Mostrar el codigo de los clientes malos
  2.  
  3. for(k=0;k<MAX;k++)
  4. { if(tipo[k]=='M' && deuda[k]>mayor)
  5.     mayor=deuda[k];
  6.     aux=cod[k];
  7. }

Las dos sentencias que dependen del if deberian ir en un bloque:

Código
  1. //Mostrar el codigo de los clientes malos
  2.  
  3. for(k=0;k<MAX;k++)
  4. { if(tipo[k]=='M' && deuda[k]>mayor)
  5.     {
  6.     mayor=deuda[k];
  7.     aux=cod[k];
  8.     }
  9. }
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Dar una salida en forma de lista en leguaje C
« Respuesta #9 en: 17 Marzo 2013, 17:06 pm »

Ademas de la corrección que ya te indico pacoperico otras dos son:

1) Al pedir confirmación si se debe continuar o no:
Código
  1. scanf("%f",&deuda[i]);
  2. printf("\n\nHay otro cliente...S/N? ");
  3. scanf("%c",&resp);
La variable "resp" terminara almacenando el avance de linea generado al introducir el monto de la deuda, para que funcione correctamente debes utilizar " %c":
Código
  1. scanf("%f",&deuda[i]);
  2. printf("\n\nHay otro cliente...S/N? ");
  3. scanf(" %c",&resp);

2) Asumes se introducirá el máximo numero de registros:
Código
  1. //Listar los codigos de los clientes buenos
  2. printf("\n\nClientes Buenos con deuda menor a 10000 bs");
  3. printf("\n\nCodigo del cliente");
  4. for(j=0;j<MAX;j++)
  5. {
  6.   /* ... */
  7. }
  8.  
  9. //Mostrar el codigo de los clientes malos
  10. for(k=0;k<MAX;k++)
  11. {
  12.      /* ... */
  13. }
Lo que generara resultados incorrecto si el numero de registros es menor, debes cambiar las comparaciones que controlan los bucles a:
Código
  1. //Listar los codigos de los clientes buenos
  2. printf("\n\nClientes Buenos con deuda menor a 10000 bs");
  3. printf("\n\nCodigo del cliente");
  4. for(j=0;j<i;j++)
  5. {
  6.   /* ... */
  7. }
  8.  
  9. //Mostrar el codigo de los clientes malos
  10. for(k=0;k<i;k++)
  11. {
  12.      /* ... */
  13. }
Para así procesar solo los registros introducidos.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines