|
1061
|
Programación / Programación C/C++ / Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
|
en: 11 Enero 2013, 22:56 pm
|
Hola Leo gracias por tu dedicación a estos proyectos locos que hago ya estoy viendo las diferencias en c y c++ y mezclado con foxpro salen una buena ensalada Luis Al final logré una horita y he podido empezar a leer sobre los ficheros en C++. Te paso el código en C++ de lo que pedias ¡ ¡ ¡. Compilalo y ejecutalo y luego abre el fichero de texto luis2.txt, ahí estarán todas las matrices resultantes de aplicar el incremento de uno a cada array, todo un gustazo ¡ ¡ ¡ y en luis.txt es donde están, o bien tú lo pones a mano, los arrays.#include <iostream> #include <fstream> #include <string> using namespace std; int main () { int i,j,v[6]={0},a[6][6]; /*********** ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO ************/ fstream myfile ("luis.txt"); if (myfile.is_open()){ myfile << "01 32 34 38 41 44\n"; myfile << "03 06 19 32 47 49\n"; myfile << "08 12 20 34 47 49\n"; myfile.close(); } else cout << "\n Incapaz de crear o abrir el fichero \n"; /**************************************************************************/ string line; ifstream myfile1 ("luis.txt"); if (myfile1.is_open()){ ofstream myfile3 ("luis2.txt"); if (myfile3.is_open()){ myfile1 >>v[0] >>v[1]>>v[2] >>v[3]>>v[4] >>v[5]; while ( (!myfile1.eof())) { for (i=0;i<6;i++) cout << "v["<<i<<"] = "<<v[i] << " "; cout <<endl; for (i=0;i<6;i++) for (j=0;j<6;j++){ if (i!=j) a[i][j]=v[j]; else a[i][j]=v[i]+1; } myfile3 << "\n ";cout <<endl; for (i=0;i<6;i++){ for (j=0;j<6;j++){ cout << a[i][j]<< " "; myfile3 << a[i][j] <<" "; }myfile3 << "\n ";cout <<endl; } myfile1 >>v[0] >>v[1]>>v[2] >>v[3]>>v[4] >>v[5]; } myfile3.close();/**/ } else cout << "\n Incapaz de crear o abrir el fichero \n"; myfile1.close(); } else cout << "\n Incapaz de crear o abrir el fichero \n"; return 0; }
Saluditos!.P.D: Es mi primer código con ficheros en C++. Supongo que la semana que viene, cuando me haya visto el tema con más calma, me parecerá horrible pero ........ hace lo que pedías.
|
|
|
1062
|
Programación / Programación C/C++ / Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
|
en: 11 Enero 2013, 16:10 pm
|
Vale veré este fin de empaparme con eso,es que solo los fines de semana es que puedo estudiar.
Mirare esos enlaces a ver si me entero
Gracias
Luis
Animo que son dos dias ¡ ¡ ¡. Como te he comentado me defiendo más en C que en C++, no obstante haré lo que tú comentas y me iré mirando los ficheros en C++. Pero para que veas que es relativamente sencillo, te dejo el código en C -guárdalo con la extensión .c -. No hace falta manejar memoria dinámica ya que sólo haces uso de un array de seis elementos. La idea es leer una línea de esos seis elementos, formar la matriz con los incrementos correspondientes y guardarla en un nuevo fichero. Así de sencillo: un solo array y una sola matriz para todo, independientemente de cuantas líneas tenga el fichero. Para que lo" veas" te dejo los printf -en C++ serían cout-:#include <stdio.h> #include <stdlib.h> #define NOM_ARCHIVO "luis_C.txt" #define NOM_ARCHIVO2 "luis2_C.txt" #define NUM_ELEM 6 int main(void){ FILE *fichero,*fichero2; float v[NUM_ELEM],a[6][6]; int i,j; /*********** ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO ************/ if ((fichero = fopen(NOM_ARCHIVO, "w")) == NULL){ perror(NOM_ARCHIVO); return EXIT_FAILURE; } fprintf(fichero, "01 32 34 38 41 44\n"); fprintf(fichero, "03 06 19 32 47 49\n"); fprintf(fichero, "08 12 20 34 47 50"); /*fprintf(fichero, "01 32 34 38 41 44\n03 06 19 32 47 49\n08 12 20 34 47 50");<== o este solo fprintf*/ fclose(fichero); /**************************************************************************/ if ((fichero = fopen(NOM_ARCHIVO, "r")) == NULL){ perror(NOM_ARCHIVO); return EXIT_FAILURE; } if ((fichero2 = fopen(NOM_ARCHIVO2, "w")) == NULL){ perror(NOM_ARCHIVO); return EXIT_FAILURE; } while (fscanf(fichero,"%g %g %g %g %g %g", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5])==6){ for (i=0;i<6;i++) printf ("v[%d]= %g ",i, v[i]); puts("\n");puts("\n"); for (i=0;i<6;i++) for (j=0;j<6;j++){ if (i!=j) a[i][j]=v[j]; else a[i][j]=v[i]+1; } fprintf (fichero2, "\n "); for (i=0;i<6;i++){ for (j=0;j<6;j++){ printf ("%g ", a[i][j]); fprintf (fichero2, "%g ", a[i][j]); }fprintf (fichero2, "\n ");puts("\n"); } } fclose(fichero); fclose(fichero2); return EXIT_SUCCESS; }
Saluditos!. P.D: Recuerda que los ficheros generados se encuentran en la misma carpeta donde está el código.
|
|
|
1063
|
Programación / Programación C/C++ / Re: Duda llamar funciones
|
en: 10 Enero 2013, 18:54 pm
|
Uffff me habeis salvado!! Muchisimas gracias ya mas o menos veo que me anda todo! Pero no me termina de andar esto, son errores de funcione y me suena a mi que esta en los return que estan mal colocados que pensais¿?
La función primo no estaba bien implementada y la que tenías de factorial inicialmente era mejor. Te he incluido la librería "#include<locale.h>" con la instrucción en el main de "setlocale(LC_ALL, "Spanish");", lo que permite que se vean los acentos y no símbolos extraños.:#include <stdio.h> #include<locale.h> void menu(void); int factorial(int n); int primo(int n); int main() { int numero,opcion, resultado; setlocale(LC_ALL, "Spanish"); while (1){ menu(); scanf("%d",&opcion); switch (opcion){ case 0: return 2; case 1: printf("Introduzca el número: "); scanf("%d", &numero); resultado = factorial(numero); printf("El factorial de %d es %d\n\n\n", numero, resultado); break; case 2: printf("Introduzca el número: "); scanf("%d", &numero); resultado=primo(numero); if(resultado==1) printf("EL número %d es primo\n\n\n",numero); else printf("EL número %d no es primo \n\n\n",numero); break; } } return 0; } /******************* MENU **********************/ void menu(){ printf( "Marque la opción que prefiera\n"); printf( "0 Salir del programa\n"); printf( "1 Calcular el factorial de una número\n"); printf( "2 Comprobar si un número es primo\n"); printf( "3 Calcular el mínimo común múltiplo\n"); printf( "4 Calcular el máximo común divisor\n"); printf( "5 Determinar si un año es bisiesto\n"); printf( "6 Mostrar los años bisiestos\n"); printf( "7 Mostrar número de dias de un mes y año\n"); printf( "8 Calcular números combinatorios\n"); printf( "9 Operar números racionales\n"); printf( "10 Jugar al doble o nada\n"); } /****************** FACTORIAL ******************/ int factorial(int n) { if(n > 1) return n * factorial(n-1); else return 1; } /***************** PRIMO ***********************/ int primo(int n){ int x=2; while(x<n){ if (n%x==0) return 0; x=x++; } return 1; } /*********************************************/
Saluditos!.
|
|
|
1066
|
Programación / Programación C/C++ / Re: AYUDA LENGUAJE C
|
en: 8 Enero 2013, 20:57 pm
|
BUENASS..
Vamos, resumiendo y sin parafernalias:#include <stdio.h> #include <conio.h> int main (){ int num; printf ("ESCRIBI UN NUMERO\n"); num = getche (); puts("\n"); printf ("EL NUMERO ESCRITO ES: %c es decir %d o sea %d\n", num,num-48,num-'0') ; system ("PAUSE"); return 0; }
Saluditos!.
|
|
|
1067
|
Programación / Programación C/C++ / Re: ejercicio
|
en: 8 Enero 2013, 16:12 pm
|
lo peor es que es un error logico, porque compila y todo .........................................sorry, ya ví que declaras diferencia como variable global pero no le "llega" a las funciones "horas(); calcularCargo();" Por cierto, te falta "#include <cstdlib>" para usar "system("PAUSE");". REEDITO: Ahora sí llega:
#include <iostream> #include <cstdlib> using namespace std; int diferencia; int hora_segundo(int h, int m,int s){ return (h*3600)+(m*60)+s; } int diferencia_hora() { int h_e,h_s,m_e,m_s,s_e,s_s; int hora_ingreso, hora_egreso, diferencia; cout<<"ingrese la hora de entrada en formato 24hs."<<endl; cout<<"ejemplo 15:30:25 un dato a la vez"<<endl; cout<<"ingrese la hora de entrada"<<endl; cin>>h_e; cout<<"ingrese los minutos"<<endl; cin>>m_e; cout<<"ingrese los segundos"<<endl; cin>>s_e; hora_ingreso=hora_segundo(h_e, m_e, s_e); cout<<"hora_ingreso "<<hora_ingreso<<endl; cout<<"ingrese la hora de salida en formato 24hs."<<endl; cout<<"ejemplo 20:35:42 un dato a la vez"<<endl; cout<<"ingrese la hora de salida"<<endl; cin>>h_s; cout<<"ingrese los minutos"<<endl; cin>>m_s; cout<<"ingrese los segundos"<<endl; cin>>s_s; hora_egreso=hora_segundo(h_s, m_s,s_s); cout<<"hora_egreso "<<hora_egreso<<endl; diferencia=hora_egreso-hora_ingreso; cout<<"diferencia "<<diferencia<<endl; return diferencia; } void horas(int dif) { /*cout<<"diferencia "<<dif<<endl; cout<<"diferencia "<<diferencia<<endl;*/ int sec, hr, min; sec=diferencia; hr = sec / (60*60); sec %= 60*60; min = sec / 60; sec %= 60; cout << hr << " hora"; if(hr != 1) cout << "s"; cout << ":" << min << " minuto"; if(min != 1) cout << "s"; cout << ":" << sec << " segundo"; if(sec != 1) cout << "s"; } int calcularCargo(int dif) { int rdo, rdo1; if (dif<=10800) { rdo=2; } else { if ((dif<10800)&&(dif>=86400)) { rdo=(dif-10800)/3600; rdo1 %= 60*60; if (rdo1>=1) { rdo=rdo+1; } rdo=2+(rdo*0.5); } } return rdo; } int main() { diferencia=diferencia_hora(); /*cout<<"diferencia2 "<<diferencia<<endl; system("PAUSE");*/ horas(diferencia); calcularCargo(diferencia); system("PAUSE"); cin.get(); return 0; }
Saluditos!.
|
|
|
1068
|
Programación / Programación C/C++ / Re: Problema cadenas
|
en: 8 Enero 2013, 15:48 pm
|
Pero el error está ahi, no sé que falla D:
Pues a mí si me funciona:#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char dc[25],dr[25],dp[25],dt[25]; printf("Introduce nombre de archivo sin extension: "); scanf ("%s", dc); fflush(stdin); strcpy(dp,dc); strcpy(dr,dc); strcpy(dt,dc); strcat(dc,".train"); strcat(dp,".test"); strcat(dr,".real"); strcat(dt,".out"); printf("dc=%s dp=%s dr=%s dt=%s \n",dc,dp,dr,dt); FILE* fichero; fichero = fopen("dc", "wt"); fputs("1", fichero); fclose(fichero); fichero = fopen("dp", "wt"); fputs("5", fichero); fclose(fichero); fichero = fopen("dr", "wt"); fputs("10", fichero); fclose(fichero); char linea[81]; fichero = fopen("dc", "rt"); if (fichero == NULL){ printf("No existe el fichero!\n"); return 1; } while ((fgets(linea, 80, fichero) != NULL)){ puts(linea); } fclose(fichero); fichero = fopen("dp", "rt"); if (fichero == NULL){ printf("No existe el fichero!\n"); return 1; } while ((fgets(linea, 80, fichero) != NULL)){ puts(linea); } fclose(fichero); fichero = fopen("dr", "rt"); if (fichero == NULL){ printf("No existe el fichero!\n"); return 1; } while ((fgets(linea, 80, fichero) != NULL)){ puts(linea); } fclose(fichero); return 0; }
Especifica mejor el error o pon más código. Saluditos!.
|
|
|
1069
|
Programación / Programación C/C++ / Re: Necesito ayuda con un problemita
|
en: 7 Enero 2013, 16:37 pm
|
Capooo! Muchisimas gracias! Eso era lo que buscaba, no me sabia lo del while
Mirándolo mejor, creo que no es necesario sumar cada vez 50 cuadrados, ya que bastaría sumarlos la primera vez solamente y luego restar por la izquierda al más pequeño y sumar por la derecha al siguiente, osea:#include<stdio.h> int main() { int i = 0,j=0; int suma = 0; for(i=1; i <= 50; i++) suma += i*i; while (1){ if (suma==26110725){ break; } j++;suma+=-j*j+(50+j)*(50+j); }printf("La suma es %d desde %d hasta %d\n",suma,j+1,j+50); /*****************Para comprobar******************/ suma=0; for(i=j+1 ; i <= j+50; i++){ printf("%d x %d = %d\n ", i,i,i*i); suma += i*i; } printf("La suma es: %d\n", suma); return 0; }
Saluditos!.
|
|
|
1070
|
Programación / Programación C/C++ / Re: Saber numeros primeros en una cadena desordenada pero a voluntad del usuario ?
|
en: 7 Enero 2013, 15:19 pm
|
Sera que uso Dev ya que el programa no se detiene a mostrarme los numeros compila bien y todo,pero no me muestra nada de lo rapido que se sale
Además surge una duda, al introducir 2,3,7,0 da como primos 3,7 .... ¿y el 2?. Para que tengas otro enfoque en el siguiente código: * se pide al usuario que introduzca previamente el total de números a ingresar. * Como ordenación he usado el método burbuja. * Guardo los números primos en un arrray, de tamaño el número de primos que hay, por si tuviera que usarlos posteriormente para otra cosa.#include <iostream> #include <cstdlib> using namespace std; void burbuja(int a[], int n){ int indiceintercambio, j,i; i=n-1; while(i>0) { indiceintercambio=0; for(j=0; j<i; j++) if(a[j]>a[j+1]) { int aux = a[j]; a[j]=a[j+1]; a[j+1]=aux; indiceintercambio=j; } i = indiceintercambio; } } int primo(int n){ int res; if(n==1) return false; for(int i=2; i < n; i++){ res = n % i; if(res==0) return false; } return true; } int main(){ bool primos = false; int cont = 0,n; cout << "Indique el total de numeros: "; cin >>n; int numero[n],temp[n]; for(int j=0;j<n;j++){ cout << "Introduzca numero " << j+1 <<": "; cin >> numero[j]; } cout << "Desordenados: "; for(int k=0;k<n;k++){ primos = primo(numero[k]); if(primos==true) { temp[cont]= numero[k]; cout << temp[cont] <<" "; cont++; } } cout << endl << "Hay " << cont << " numeros primos"<<endl; cout << endl<< endl; int num_primo[cont]; for(int k=0;k<cont;k++){ num_primo[k]=temp[k]; } cout << endl<< "Ordenados: "; burbuja(num_primo,cont); for(int k=0;k<cont;k++){ cout << num_primo[k] <<" "; } cout << endl; system ("pause"); return 0; }
Saluditos!.P.D: Cámbiate de Dev a Code::Blocks, además de otras cosas el uso de pestañas y múltiples ventanitas en la misma ventana le hace más versátil . ... y pausa automáticamente el programa .... y es libre.
|
|
|
|
|
|
|