• Lunes 29 de Abril de 2024, 00:17

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Nevhazovat

Páginas: 1 [2]
26
C/C++ / Re: Operaciones Con Ficheros
« en: Domingo 17 de Diciembre de 2006, 12:34 »
¿Y cómo hago para cargar los datos del fichero?

27
C/C++ / Re: Operaciones Con Ficheros
« en: Domingo 17 de Diciembre de 2006, 02:19 »
Me parece que no se hacer bien eso que dices. Algo he intentado.

Por cierto, ahora si me saca por pantalla las estadísticas. Pero esto sólo ocurre cuando yo ejecuto el programa, hago el ingreso de un cliente y luego le doy a consultar estadisticas. Si cuando yo ejecuto el programa voy directamente a mirar las estadísticas es cuadno no me la muestra y sale de nuevo el menu. Y eso es lo que me gustaría cambiar. Resumiendo, que si hay algunos datos de clientes guardados en el fichero banco.txt y yo ejecuto el programa, dándole SÓLO a consultar estadísticas me las muestre directamente, sin hacer otra cosa.

No se si eso es lo que tu pensabas que quería o era otra cosa. Pero es que así tengo que ingresar por lo visto un cliente para poder visualizarlas por pantalla.

Otra cosa es que las estadisticas me las consulta de los clientes que ingreso en el momento que estoy ejecutando el programa y no del fichero completo. Y los valores que saca no son correctos.

Siento estar dándote la brasa todo el rato con mis problemas, que son míos y a nadie más incumben, pero es que no se las horas que llevo ya delante del ordenador intentando sacar algo en claro. Tu lo ves todo tan sencillo y a mi me resulta todo tan complicado. Me veo impotente por no poder sacar adelante el dichoso ejercicio.  

Y el caso es que no puedo dejar de revisarlo, aunque esté hasta las narices de él, porque tengo que entregarlo ya este lunes.

Buff, voy a odiar la programación a este paso.

Te paso nuevamente el código por si quieres molestarte en mirarlo.

28
C/C++ / Re: Operaciones Con Ficheros
« en: Domingo 17 de Diciembre de 2006, 00:35 »
El código es ese.

29
C/C++ / Re: Operaciones Con Ficheros
« en: Domingo 17 de Diciembre de 2006, 00:26 »
Hola.

Pues a mi es que no me sale. El clrscr está con comentarios y he puesto getch() también, pero nada, sigue igual.  

Ya es que no se que hacer. Mis recursos son limitados.

30
C/C++ / Re: Operaciones Con Ficheros
« en: Sábado 16 de Diciembre de 2006, 20:50 »
Pero no funciona en el menu. Al pulsar el 3 vuelve a sacar el Menu.

31
C/C++ / Re: Operaciones Con Ficheros
« en: Sábado 16 de Diciembre de 2006, 16:28 »
Me acabo de dar cuenta que inicializas la variable cuenta_clientes=0 pero luego no la utilizas. Puede que venga de ahí el error. Si me lo puedes aclarar...porque ando ya...buff.

Un saludo.

EDITO: Vale lo de cuenta_clientes lo utilizas para el apartado a). Perdona, es que estoy ciego ya de tanto mirar. El que no utilizas es el de num_clientes que es el valor máximo de los bucles for, pero no aparece definido. ¿Hasta que valor recorre?

¡¡¡Madre mía!!! Deseando estoy que se pase el lunes para entregar las dichosas prácticas. ¡¡¡Qué agobio!!!

32
C/C++ / Re: Clave Secreta En C
« en: Sábado 16 de Diciembre de 2006, 03:41 »
Bufff, ni idea de eso. Debe haber otra forma.

33
C/C++ / Re: Clave Secreta En C
« en: Sábado 16 de Diciembre de 2006, 02:31 »
Hola.

No se a que te refieres con lo de comparar los valores ASCII.

34
C/C++ / Re: Clave Secreta En C
« en: Viernes 15 de Diciembre de 2006, 20:32 »
Bueno, me he decidido a hacerlo de otra manera. Pero como quiera que los errores o los fallos me persiguen allí donde quiera intentar algo nuevo, les posteo el nuevo código.  

Uno de los fallos es que si meto como clave los 4 numeros iguales (p.e 1111) y luego en la comprobación se acierta, me saca que hay ¡¡¡12 desordenados!!!  ¿Qué hacer para corregir esto?

¿Cómo puedo limitar los intentos a 5?
¿Y para imprimir **** en lugar de los números en este código?

Código va.

Código: Text
  1. #include <stdio.h>
  2. #define N 4
  3.  
  4. int error (char cadena[N]) {
  5.   int i, j;
  6.   for (i=0; i<N; i++) {
  7.  
  8.    //CARACTERES ERRONEOS
  9.    if ((cadena[i]!='1') && (cadena[i]!='2') && (cadena[i]!='3') &&
  10.   (cadena[i]!='4') && (cadena[i]!='5') && (cadena[i]!='6') && (cadena[i]!='7')
  11.   && (cadena[i]!='8') && (cadena[i]!='9') && (cadena[i]!='0')) {
  12.     printf("Caracteres erroneos.\n");
  13.     printf("Intentalo otra vez.\n");
  14.     return 1;
  15.    }
  16.   }
  17.     return 0;
  18. }
  19. int desordenados_ (char propuesta[N], char clave[N]) {
  20.   int i, j, desordenados=0;
  21.   for (i=0; i<N; i++)
  22.    for (j=0; j<N; j++)
  23.       if (clave[i]==propuesta[j] && i!=j)
  24.   desordenados++;
  25.   if (desordenados) printf("Hay %d numeros desordenados.\n", desordenados++);
  26.   else printf("Ningun numero pertenece a la clave.\n");
  27.   return desordenados;
  28. }
  29.  
  30. int aciertos_ (char propuesta[N], char clave[N]) {
  31.   int i, aciertos=0;
  32.   for (i=0; i<N; i++)
  33.    if (clave[i]==propuesta[i])
  34.     aciertos++;
  35.   if (aciertos) printf("Hay %d aciertos.\n", aciertos);
  36.   else printf("No hay aciertos.\n");
  37.   return aciertos;
  38. }
  39.  
  40. int main() {
  41.   char cl[N+1], pr[N+1];
  42.   int i, aciertos, desordenados;
  43.  
  44.   do {
  45.    printf("Escribe la clave que se ha de adivinar (4 digitos): ");
  46.    gets(cl);
  47.   } while (error(cl));
  48.   printf("\n\n");
  49.  
  50.   while (aciertos!=4) {
  51.   do {    
  52.    printf("\n¿Cual crees que es la clave? ");
  53.    gets(pr);
  54.   } while (error(pr));
  55.     desordenados=desordenados_(pr, cl);
  56.    aciertos=aciertos_(pr, cl);
  57.   }
  58.  
  59.   if (aciertos==4) printf("\nAcertaste!\n");
  60.   return 0;
  61. }
  62.  

35
C/C++ / Re: Operaciones Con Ficheros
« en: Viernes 15 de Diciembre de 2006, 11:44 »
Buenos dias.

El código compila perfectamente, pero a la hora de introducir las opciones del menu no hace nada.

Lo he modificado un poco para que entre en el menu y y se puedan realizar las acciones pertinentes. Todas funcionan bien salvo la de las estadístcas. Cuando se pulsa el 3 te devuelve el Menú y asi todo el rato. Te adjunto el codigo.

36
C/C++ / Re: Operaciones Con Ficheros
« en: Viernes 15 de Diciembre de 2006, 03:30 »
Hola Max. Gracias por responder.

Lo debo de ahcer mal. No me funciona. Creo la variable global y luego meto el código que me has dado debajo del cuerpo de las otras. Algo así:

Código: Text
  1. /*Escribir un programa en C que a partir de un fichero dado con el formato adecuado:
  2. a) Cuente el nº de clientes de un banco con al menos 40 años y saldo en cuenta inferior a 1.200 euros;
  3. b ) Imprima el saldo menor y el saldo mayor de los clientes mayores de 30 años;
  4. c) Imprima la edad media de todos los clientes;
  5. d) Imprima el número de clientes que se llaman igual y viven en la misma ciudad;*/
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <conio.h>
  10.  
  11.  
  12. struct banco {
  13. int Ncliente;
  14. char Nombre[15];
  15. char Ap[20];
  16. int Edad;
  17. int Saldo;
  18. char Ciudad[20];
  19. };
  20. struct banco Banco[10]; /* max 10 clientes */
  21. /* variable global para guardar los datos de los clientes */
  22.  
  23. void InsertarCliente();
  24. /* Añade un nuevo cliente al final del fichero */
  25.  
  26. void ConsultarCliente();
  27. /* Consulta los datos personales de un cliente a traves de la clave del fichero */
  28.  
  29. void num_clientes();
  30. /* Consulta las estadisticas de los clientes introducidos */
  31.  
  32. void InsertarCliente()
  33. /* Anade un nuevo cliente al final del fichero */
  34. {FILE *fp;
  35. int Edad, NCliente, Saldo;
  36. char Nombre[20], Ap[20], Ciudad[20];
  37. printf("Cuales son los datos del cliente a insertar?\n");
  38. printf("NCliente:");
  39. scanf("%d", &NCliente);
  40. fflush(stdin);
  41. printf("Nombre:");
  42. gets(Nombre);
  43. fflush(stdin);
  44. printf("Apellido:");
  45. gets(Ap);
  46. printf("Edad:");
  47. scanf("%d", &Edad);
  48. fflush(stdin);
  49. printf("Saldo:");
  50. scanf("%d",&Saldo);
  51. fflush(stdin);
  52. printf("Ciudad:");
  53. gets(Ciudad);
  54. if ((fp=fopen("banco.txt", "a"))==NULL) /* detecta error */
  55. {printf("Error al abrir el fichero");
  56. }
  57. fprintf(fp, "%d %s %s %d %d %s\n", NCliente, Nombre, Ap, Edad, Saldo, Ciudad);
  58. /* escribimos el registro al final del fichero */
  59. if (fclose(fp)==0)
  60. {printf("\nFichero cerrado correctamente");
  61. }
  62. else {printf("Error al cerrar fichero");
  63. }
  64. }
  65.  
  66. void ConsultarCliente()
  67. /* Consulta los datos personales de un cliente a traves del campo clave NCliente */
  68. {FILE *fp;
  69. int i=0, salir=0, Mat;
  70. printf("Cual es el numero de matricula del cliente a consultar? ");
  71. scanf("%d", &Mat);
  72. if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
  73. {printf("Error al abrir el fichero");
  74. }
  75. do
  76. {/* de paso guardamos los datos en estructuras adecuadas */
  77. fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
  78. if (Mat==Banco[i].Ncliente)
  79. {printf("%d %s %s %d %d %s\n", Banco[i].Ncliente, Banco[i].Nombre, Banco[i].Ap, Banco[i].Edad, Banco[i].Saldo, Banco[i].Ciudad);
  80. salir=1;
  81. }
  82. else
  83. {i++;
  84. }
  85. }
  86. while (salir!=1 && !feof(fp));
  87. if (fclose(fp)==0)
  88. {printf("\nFichero cerrado correctamente");
  89. }
  90. else {printf("Error al cerrar fichero");
  91. }
  92. getch();
  93.  
  94. }
  95.  
  96. void num_clientes()
  97. /* Consulta las estadisticas de los clientes introducidos */
  98. {int i, cuenta_clientes = 0, menor = Banco[0].Saldo, mayor = Banco[0].Saldo, media, iguales = 0, total = 0, j;
  99. for (i = 0; i < num_clientes; i++)  {
  100.      // para los clientes con mas de 40 años y mas de 1.200 euros de saldo
  101.     if ((Banco[i].Edad > 40) && (Banco[i].Saldo > 1200))  {
  102.           cuenta_clientes++;
  103.      }
  104.     // Calculo del mayor de los saldos
  105.      if (Banco[i].Saldo > mayor)  {
  106.         mayor = Saldo[i].Saldo;
  107.     }
  108.      // Calculo del menor de los saldos
  109.      if (Banco[i].Saldo < menor)   {
  110.       menor = Banco[i].Saldo;
  111.      }
  112.      // Calculo de la edad media de los clientes
  113.     total = total + Banco[i].Edad;
  114.      
  115.      // Calculo de los nombres y las ciudades iguales
  116.     for (j = i + 1; j < num_clientes; j++)  {
  117.            if ((strcmp(Banco[i].Nombre,Banco[j].Nombre) == 0) && (strcmp(Banco[i].Ciudad,Banco[j].Ciudad) == 0))  {
  118.                iguales++;
  119.         }
  120.      }
  121. }
  122. media = total / num_clientes;
  123.  
  124.  
  125. //AQUÍ SUPONGO QUE IRÍAN LAS OPERACIONES
  126.  
  127. main ()
  128. {FILE * fp, *fp2;
  129. char c;
  130. int x, resp;
  131. char titulo[15][30];
  132. char director[15][20];
  133. int cinta[15];
  134. for (;
  135. {do
  136. {//clrscr();
  137. printf("\nMENU PROGRAMA\n");
  138. printf("----------------\n");
  139. printf("1. Insertar nuevo cliente\n");
  140. printf("2. Consultar cliente\n");
  141. printf("3. Numero de cliente\n");
  142. printf("3. Terminar\n");
  143. scanf("%d", &resp);
  144. }
  145. while (resp!=1 && resp!=2 && resp!=3 && resp!=4); /* solo aceptamos respuestas validas */
  146. switch (resp)
  147. {case 1: InsertarCliente();
  148. break;
  149. case 2: ConsultarCliente();
  150. break;
  151. case 3: num_clientes();
  152. break;
  153. default: printf("\nFin de programa\a");
  154. exit(0);
  155. break;
  156. }
  157. }
  158. }
  159.  

¿Qué está mal en el tocho?

37
C/C++ / Re: Operaciones Con Ficheros
« en: Viernes 15 de Diciembre de 2006, 02:35 »
Hola.

Gracias por tu atención.

En realidad lo que necesito es:

a) Cuente el nº de clientes de un banco con al menos 40 años y saldo en cuenta inferior a 1.200 euros.
B) Imprima el saldo menor y el saldo mayor de los clientes mayores de 30 años.
c) Imprima la edad media de todos los clientes.
d) Imprima el número de clientes que se llaman igual y viven en la misma ciudad.

Esto es lo que no se cómo hacer.

Un saludo.

38
C/C++ / Operaciones Con Ficheros
« en: Viernes 15 de Diciembre de 2006, 01:39 »
Hola.

Ahora mismo estoy con una práctica de ficheros. El programa me permite introducir datos en el fichero y luego consultarlos. Pero me gustaría poder hacer "operaciones" con los datos introducidos en el fichero, pero no ando muy sobrado y me gustaría saber como podría hacerlo.

¿Alguien me puede echar una mano? Ahí va el código.

Citar
/*Escribir un programa en C que a partir de un fichero dado con el formato adecuado:
a) Cuente el nº de clientes de un banco con al menos 40 años y saldo en cuenta inferior a 1.200 euros;
b ) Imprima el saldo menor y el saldo mayor de los clientes mayores de 30 años;
c) Imprima la edad media de todos los clientes;
d) Imprima el número de clientes que se llaman igual y viven en la misma ciudad;*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


struct banco {
int Ncliente;
char Nombre[15];
char Ap[20];
int Edad;
int Saldo;
char Ciudad[20];
};
struct banco Banco[10]; /* max 10 clientes */
/* variable global para guardar los datos de los clientes */

void InsertarCliente();
/* Añade un nuevo cliente al final del fichero */

void ConsultarCliente();
/* Consulta los datos personales de un cliente a traves de la clave del fichero */

void ConsultarEstadisticas();
/* Consulta las estadisticas de los clientes introducidos */


void InsertarCliente()
/* Anade un nuevo cliente al final del fichero */
{FILE *fp;
int Edad, NCliente, Saldo;
char Nombre[20], Ap[20], Ciudad[20];
printf("Cuales son los datos del cliente a insertar?\n");
printf("NCliente:");
scanf("%d", &NCliente);
fflush(stdin);
printf("Nombre:");
gets(Nombre);
fflush(stdin);
printf("Apellido:");
gets(Ap);
printf("Edad:");
scanf("%d", &Edad);
fflush(stdin);
printf("Saldo:");
scanf("%d",&Saldo);
fflush(stdin);
printf("Ciudad:");
gets(Ciudad);
if ((fp=fopen("banco.txt", "a"))==NULL) /* detecta error */
{printf("Error al abrir el fichero");
}
fprintf(fp, "%d %s %s %d %d %s\n", NCliente, Nombre, Ap, Edad, Saldo, Ciudad);
/* escribimos el registro al final del fichero */
if (fclose(fp)==0)
{printf("\nFichero cerrado correctamente");
}
else {printf("Error al cerrar fichero");
}
}

void ConsultarCliente()
/* Consulta los datos personales de un cliente a traves del campo clave NCliente */
{FILE *fp;
int i=0, salir=0, Mat;
printf("Cual es el numero de matricula del cliente a consultar? ");
scanf("%d", &Mat);
if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{printf("Error al abrir el fichero");
}
do
{/* de paso guardamos los datos en estructuras adecuadas */
fscanf(fp, "%d %s %s %d %d %s\n", &(Banco.Ncliente), Banco.Nombre, Banco.Ap, &(Banco.Edad), &(Banco.Saldo), Banco.Ciudad);
if (Mat==Banco.Ncliente)
{printf("%d %s %s %d %d %s\n", Banco.Ncliente, Banco.Nombre, Banco.Ap, Banco.Edad, Banco.Saldo, Banco.Ciudad);
salir=1;
}
else
{i++;
}
}
while (salir!=1 && !feof(fp));
if (fclose(fp)==0)
{printf("\nFichero cerrado correctamente");
}
else {printf("Error al cerrar fichero");
}
getch();

}

void ConsultarEstadisticas()
/* Consulta las estadisticas de los clientes introducidos */

{

//AQUÍ SUPONGO QUE IRÍAN LAS OPERACIONES

main ()
{FILE * fp, *fp2;
char c;
int x, resp;
char titulo[15][30];
char director[15][20];
int cinta[15];
for (;
{do
{//clrscr();
printf("\nMENU PROGRAMA\n");
printf("----------------\n");
printf("1. Insertar nuevo cliente\n");
printf("2. Consultar cliente\n");
printf("3. Terminar\n");
scanf("%d", &resp);
}
while (resp!=1 && resp!=2 && resp!=3 && resp!=4); /* solo aceptamos respuestas validas */
switch (resp)
{case 1: InsertarCliente();
break;
case 2: ConsultarCliente();
break;
case 3: ConsultarEstadisticas();
break;
default: printf("\nFin de programa\a");
exit(0);
break;
}
}
}

39
C/C++ / Clave Secreta En C
« en: Miércoles 13 de Diciembre de 2006, 20:59 »
Hola.

Estoy haciendo un programa que acepta una clave secreta y evalúa la que el usuario teclea posteriormente, con un máximo de 5 intentos.

Este es el código.

Citar
#include <stdio.h>
#include <string.h>

void main(void)
{
   char clave [20], prueba [20];
   int comparacion, contador=0;

   printf ("Clave: ");
   gets(clave);
   printf ("\nRepite la clave: ");
   gets(prueba);

   comparacion=strcmp(clave, prueba);

   for (contador=0;contador<5;contador++)
   {
  if(comparacion)
  {
   printf ("\nLa clave es incorrecta.\nRepite la clave: ");
   gets(prueba);
   comparacion=strcmp(clave, prueba);
  }
  else
  {
   contador=5;
   printf ("\nLa clave es correcta.");
  }
   }
  if (contador==5)
  {
   printf("Ha superado los intentos permitidos");
  }
   getchar();
}

Lo que me gustaría saber es como hacer para que una vez introducida la comprobación de la clave, si esta es distinta de la original, me vaya diciendo los caracteres que están bien posicionados y si hay alguno que está desordenado pero que está en la clave original también lo indique. Vamos practicamente lo que hace el juego del Lingo.

Otra cosa que he intentado, y que no me sale, es que al introducir la clave original en lugar de mostrar los caracteres que se teclean, muestre asteriscos. Se que se utiliza getch() para que no imprima el caracter y putchar('*') para que me imprima el asterisco. Pero cuando ingreso la clave (digamos de 4 caracteres, por ejemplo) al pulsar intro me pone el 5º asterisco y, claro, luego al comprobar la contraseña no me funciona.

Lo dicho. Un poco de ayuda no viene mal.

Gracias por tomarse la molestia en leer este tocho.

Un saludo.

Páginas: 1 [2]