|
Mostrar Mensajes
|
Páginas: [1]
|
2
|
Programación / Programación C/C++ / Problema con Ejecutable
|
en: 13 Marzo 2015, 03:10 am
|
Hola buen dia realizado un codigo en C y al momento de compilar me dice que no hay errores pero el problema que cuando abre el ejecutable muestra un error, ya descarte que sea problema del compilador debido a que otros codigos si me ejecuta bien... les dejo el codigo para que medigan si acaso es alguna parte que tengo mal programada-escrito... #include <stdio.h> #include <stdlib.h> #define LNOMBRE 50 #define LDIRECCION 100 typedef struct { char nombre[LNOMBRE]; /* Nombre */ char direccion[LDIRECCION]; /* Dirección */ long telefono; /* Teléfono */ } TipoDato; /* Lee un dato desde el registro indicado */ int leeDato(FILE *fichero, TipoDato *dato, int pos) { if(fseek(fichero,pos*sizeof(TipoDato),SEEK_SET)) return 0; return fread(dato, sizeof(TipoDato),1,fichero)==1; } /* Escribe un dato desde el registro indicado */ int escribeDato(FILE *fichero, TipoDato *dato, int pos) { if(fseek(fichero,pos*sizeof(TipoDato),SEEK_SET)) return 0; return fwrite(dato, sizeof(TipoDato),1,fichero)==1; } /* Añade un dato al final del fichero */ int anadeDato(FILE *fichero, TipoDato *dato) { if(fseek(fichero,0,SEEK_END)) return 0; return fwrite(dato, sizeof(TipoDato),1,fichero)==1; } /*Programa de prueba que aleatoriamente añade o modifica */ int main() { int i,nreg,anade,res; FILE *f; TipoDato d; if((f=fopen("listin.bin","r+b"))== NULL) return 1; /*Muestra los datos*/ for(i=0; ; i++) if(leeDato(f,&d,i)) printf("Registro :%d\nNombre: %s\nDireccion: %s\nTelefono : %dl\n", i+1,d.nombre,d.direccion, d.telefono); else break; anade=rand()%2; if(anade) printf("Adición de registro\n"); else { printf("Modificación de registro\n"); printf("Número de registro "); scanf("%d",&nreg); gets(d.nombre); /* Se lee el final de línea que queda */ } printf("Nombre "); gets(d.nombre); printf("Dirección "); gets(d.direccion); printf("Número de teléfono "); scanf("%dl",&d.telefono); if(anade) res=anadeDato(f,&d); else res=escribeDato(f,&d,nreg-1); if(!res) printf("Error\n"); fclose(f); return 0; }
esta es lo que me muestra el ejecutable: http://www.subirimagenes.net/i/150313030930376587.jpg
|
|
|
3
|
Programación / Programación C/C++ / Re: Error en codigo Ayuda!!!
|
en: 8 Marzo 2015, 09:51 am
|
Me respondo a mi mismo ya arregle los errores, compila el programa pero sigo necesitando de su ayuda, ahora compila y ejecuta pero cuando tecleo la Opcion 1 y preciono ENTER simplemente regresa al menu y asi con las otras Opciones Este es el codigo corregido y "funcional" aun que con un problemita.... #include<stdio.h> #include<iostream> void lectura_datos(float*apun_trabajadores[10]); void imprimir_datos(float*apun_trabajadores[10]); void calcular_salarioTotal(float*apun_trabajadores[10]); main() { float*apun_trabajadores[10]; int opc; do { printf("*******MENU*******\n"); printf("1.-LECTURA DE CLAVE Y SALARIO \n"); printf("2.-APLICAR DESCUENTOS \n"); printf("3.-IMPRIMIR TABLA \n"); printf("4.-SALIR DEL PROGRAMA \n"); printf("SELECCIONE LA OPCION DESEADA \n"); scanf("%d",&opc); switch(opc) { case 1: { void lectura_datos(float*apun_trabajadores[10]); break; } case 2: { void calcular_salarioTotal(float*apun_trabajadores[10]); break; } case 3: { void imprimir_datos(float*apun_trabajadores[10]); break; } } } while(opc!=4); } void lectura_datos(float*apun_trabajadores[10]) { int fila, columna;
for(fila=0;fila<10;fila++) apun_trabajadores[fila]=(float*)malloc(6*sizeof(float)); for(fila=0;fila<10;fila++) { printf("CLAVE DEL TRABAJADOR %d= ", fila); scanf("%f",(apun_trabajadores[fila]+0)); printf("SALARIO DEL TRABAJADOR %d= ", fila); scanf("%f",(apun_trabajadores[fila]+1)); } } void imprimir_datos(float*apun_trabajadores[10]) { int fila,columna; printf("LOS ELEMENTOS DEL ARREGLO SON \n"); printf("CLAVE\tSAL_B\tIMSS\tINAS\tHRS EXT\tTOTAL\t"); for(fila=0;fila<10;fila++) { printf("\n"); for (columna=0;columna<6;columna++) { printf("%.2f\t",*(apun_trabajadores[fila]+columna));
} } printf("\n"); } void calcular_salarioTotal(float*apun_trabajadores[10]) { int fila; float s_neto,descuento_inasistencia,bono_horaextra; for(fila=0;fila<10;fila++) { printf("DESCUENTO IMSS %d= ",fila); scanf("%f",(apun_trabajadores[fila]+2)); printf("NUMERO DE FALTAS %d= ",fila); scanf("%f",(apun_trabajadores[fila]+3)); printf("HORAS EXTRAS %d= ",fila); scanf("%f",(apun_trabajadores[fila]+4));
printf("%.2f ",*(apun_trabajadores[fila]+1)); descuento_inasistencia=*(apun_trabajadores[fila]+1)/7* *(apun_trabajadores[fila]+3); bono_horaextra=(*(apun_trabajadores[fila]+1)/7)/4* *(apun_trabajadores[fila]+4); s_neto=*(apun_trabajadores[fila]+1)-*(apun_trabajadores[fila]+2)- descuento_inasistencia+bono_horaextra; *(apun_trabajadores[fila]+5)=s_neto; } }
y necesito que me aclaren estas dos preguntas dudas: ¿Por qué el arreglo bidimensional es declarado con un solo índice (solo se especifican las filas y no las columnas)? float *apun_trabajadores[10]; ¿Por qué se debe reservar espacio para las columnas? (malloc) for(fila=0; fila<10; fila++) apun_trabajadores[fila]=(float*) malloc(6*sizeof(float));
|
|
|
4
|
Programación / Programación C/C++ / Error en codigo Ayuda!!!
|
en: 8 Marzo 2015, 07:22 am
|
Hola a me dejaron un trabajo de la escuela crear un programa en dev c++ y pues ya hice todo solo que tengo un pequeño problema tengo unos errores que no logro detectar.. les dejo el codigo y espero y puedan corregirmelo que ya me canse de investigar y por eso recurro a ustedes: #include<stdio.h> #include<iostream.h> void lectura_datos(float*apun_trabajadores[10]); void imprimir_datos(float*apun_trabajadores[10]); void calcular_salarioTotal(float*apun_trabajadores[10]); main() { float*apun_trabajadores[10]; int opc; do { printf("*******MENU*******\n"); printf("1.-LECTURA DE CLAVE Y SALARIO \n"); printf("2.-APLICAR DESCUENTOS \n"); printf("3.-IMPRIMIR TABLA \n"); printf("4.-SALIR DEL PROGRAMA \n"); printf("SELECCIONE LA OPCION DESEADA \n"); scanf("%d",&opc); switch(opc) { case 1: { lectura_datos(*apun_trabajadores[10]); break; } case 2: { calcular_salarioTotal(float*apun_trabajadores[10]); break; } case 3: { imprimir_datos(float*apun_trabajadores[10]); break; } } } while(opc!=4); } void lectura_datos(float*apun_trabajadores[10]) { int fila,columna;
for(fila=0;fila<10;fila++) apun_trabajadores[fila]=(float*)malloc(6*sizeof(float)); for(fila=0;fila<10;fila++) { printf("CLAVE DEL TRABAJADOR %d= ", fila); scanf("%f,(apun_trabajadores[fila]+0)); printf("SALARIO DEL TRABAJADOR %d= ", fila); scanf("%f",(apun_trabajadores[fila]+1)); } } void imprimir_datos(float*apun_trabajadores[10]) { int fila,columna; printf("LOS ELEMENTOS DEL ARREGLO SON \n"); printf("CLAVE\tSAL_B\tIMSS\tINAS\tHRS EXT\tTOTAL\t"); for(fila=0;fila<10;fila++) { printf("\n"); for (columna=0;columna<6;columna++) { printf("%.2f\t",*(apun_trabajadores[fila]+columna));
} } printf("\n"); } void calcular_salarioTotal(float*apun_trabajadores[10]) { int fila; float s_neto,descuento_inasistencia,bono_horaextra; for(fila=0;fila<10;fila++) { printf("DESCUENTO IMSS %d= ",fila); scanf("%f",(apun_trabajadores[fila]+2)); printf("NUMERO DE FALTAS %d= ",fila); scanf("%f",(apun_trabajadores[fila]+3)); printf("HORAS EXTRAS %d= ",fila); scanf("%f",(apun_trabajadores[fila]+4));
printf("%.2f ",*(apun_trabajadores[fila]+1)); descuento_inasistencia=*(apun_trabajadores[fila]+1)/7* *(apun_trabajadores[fila]+3); bono_horaextra=(*(apun_trabajadores[fila]+1)/7)/4* *(apun_trabajadores[fila]+4); s_neto=*(apun_trabajadores[fila]+1)-*(apun_trabajadores[fila]+2)- descuento_inasistencia+bono_horaextra; *(apun_trabajadores[fila]+5)=s_neto; } }
y ademas tengo dos dudas preguntas que necesito que me despejen con claridad porfa.. ya que quiero queme quede bien claro todo ¿Por qué el arreglo bidimensional es declarado con un solo índice (solo se especifican las filas y no las columnas)? float *apun_trabajadores[10]; ¿Por qué se debe reservar espacio para las columnas? for(fila=0; fila<10; fila++) apun_trabajadores[fila]=(float*) malloc(6*sizeof(float));
|
|
|
|
|
|
|