Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: luis456 en 10 Enero 2013, 19:47 pm



Título: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: luis456 en 10 Enero 2013, 19:47 pm
Hola a todos

Me gustaria saber si es posible hacer que este codigo que suma 1 a cada numero pero de uno en uno.

01 32 34 38 41 44 <-- registro original en variable

02 32 34 38 41 44 sumamos 1 al primero
01 33 34 38 41 44 sumamos 1 al segundo
01 32 35 38 41 44 sumamos 1 al tercero
01 32 34 39 41 44 sumamos 1 al cuarto
01 32 34 38 42 44 sumamos 1 al quinto
01 32 34 38 41 45 sumamos 1 al sexto

Se podria hacer que tome de un txt varios registros y le aplique el codigo uno por uno ? no importando que sean muchos

esto es lo que llevaria el txt por decir algo.

01 32 34 38 41 44
03 06 19 32 47 49
08 12 20 34 47 49

la idea es que lea el primer registro aplique la funcion y siga con el segundo y cuando se acaben los registros guardarlos
en otro Txt,

*************************
Código:
#include <iostream>
using namespace std;
 
    int main() {
    int v[6]={1 ,32, 34, 38, 41, 44};
    int i,j,a[6][6];
    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;
        }
 
    for (i=0;i<6;i++){
        for (j=0;j<6;j++){
        cout << a[i][j]<<"   ";
        }cout << endl;
    }
    return 0;
}

Gracias de antemano

Luis


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: durasno en 10 Enero 2013, 19:59 pm
Lo que hiciste parace no tener problemas, solo es cuestion que averigues el tema de manejo de archivos. Tambien tal vez te convendria averiguar sobre memoria dinamica ya que si no sabes la cantidad de registros del archivo es mejor manejarlo dinamicamente


Saludos


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: luis456 en 11 Enero 2013, 06:38 am
Lo que hiciste parace no tener problemas, solo es cuestion que averigues el tema de manejo de archivos. Tambien tal vez te convendria averiguar sobre memoria dinamica ya que si no sabes la cantidad de registros del archivo es mejor manejarlo dinamicamente


Saludos

Gracias por responder como he dicho anteriormente trabajaba con fox :) y de memoria dinámica Npi de que existía jeje , me imagino que sera la capacidad del pc para hacer estos calculos y se libera al terminar ?

bien alguna idea de como empezar y por donde ? de todas manera por mi edad :)
aprendo mas rápido con ejemplos para trastear con ellos.

este código funciona bien pero siempre hay un pero ,es una joda que cada ves tenga que modificar los numeros a mano,

No se ni por donde empezar para que siquiera lea el archivo y menos pasar los registros a la variable.


gracias

Luis










Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: durasno en 11 Enero 2013, 07:17 am
Me parece que tu problema es que no tenes un material del cual estudiar, en cualquier libro aparecen estos temas.
En el sección de libros C/C++ vas a encontrar varios o tambien tenes http://c.conclase.net/curso/index.php  y asi hay bastante cosas en internet


Saludos


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: -- KiLiaN -- en 11 Enero 2013, 11:03 am
Busca algún manual de C++ y vete a la parte que expliquen el manejo de archivos.


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: luis456 en 11 Enero 2013, 13:31 pm
Vale vere este fin de empaparme con eso,es que solo los fines de semana es que pùedo estudiar.

Mirare esos enlaces a ver si me entero

Gracias

Luis


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: leosansan 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-:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NOM_ARCHIVO  "luis_C.txt"
  4. #define NOM_ARCHIVO2  "luis2_C.txt"
  5. #define NUM_ELEM  6
  6.  
  7. int main(void){
  8.   FILE *fichero,*fichero2;
  9.   float v[NUM_ELEM],a[6][6];
  10.   int i,j;
  11. /***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
  12.   if ((fichero = fopen(NOM_ARCHIVO, "w")) == NULL){
  13.      perror(NOM_ARCHIVO);
  14.      return EXIT_FAILURE;
  15.   }
  16.   fprintf(fichero, "01 32 34 38 41 44\n");
  17.   fprintf(fichero, "03 06 19 32 47 49\n");
  18.   fprintf(fichero, "08 12 20 34 47 50");
  19.    /*fprintf(fichero, "01 32 34 38 41 44\n03 06 19 32 47 49\n08 12 20 34 47 50");<== o este solo fprintf*/
  20.  
  21.   fclose(fichero);
  22. /**************************************************************************/
  23.   if ((fichero = fopen(NOM_ARCHIVO, "r")) == NULL){
  24.      perror(NOM_ARCHIVO);
  25.      return EXIT_FAILURE;
  26.   }
  27.    if ((fichero2 = fopen(NOM_ARCHIVO2, "w")) == NULL){
  28.      perror(NOM_ARCHIVO);
  29.      return EXIT_FAILURE;
  30.   }
  31.   while (fscanf(fichero,"%g %g %g %g %g %g", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5])==6){
  32.        for (i=0;i<6;i++)
  33.        printf ("v[%d]= %g ",i, v[i]);
  34.        puts("\n");puts("\n");
  35.        for (i=0;i<6;i++)
  36.            for (j=0;j<6;j++){
  37.                if (i!=j)
  38.                    a[i][j]=v[j];
  39.                else
  40.                    a[i][j]=v[i]+1;
  41.        }
  42.        fprintf (fichero2, "\n ");
  43.        for (i=0;i<6;i++){
  44.            for (j=0;j<6;j++){
  45.            printf ("%g ", a[i][j]);
  46.            fprintf (fichero2, "%g ", a[i][j]);
  47.            }fprintf (fichero2, "\n ");puts("\n");
  48.        }
  49.    }
  50.  
  51.   fclose(fichero);
  52.   fclose(fichero2);
  53.  
  54.   return EXIT_SUCCESS;
  55. }
  56.  
  57.  
Saluditos!.
P.D: Recuerda que los ficheros generados se encuentran en la misma carpeta donde está el código.


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: luis456 en 11 Enero 2013, 21:25 pm
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-:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NOM_ARCHIVO  "luis_C.txt"
  4. #define NOM_ARCHIVO2  "luis2_C.txt"
  5. #define NUM_ELEM  6
  6.  
  7. int main(void){
  8.   FILE *fichero,*fichero2;
  9.   float v[NUM_ELEM],a[6][6];
  10.   int i,j;
  11. /***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
  12.   if ((fichero = fopen(NOM_ARCHIVO, "w")) == NULL){
  13.      perror(NOM_ARCHIVO);
  14.      return EXIT_FAILURE;
  15.   }
  16.   fprintf(fichero, "01 32 34 38 41 44\n");
  17.   fprintf(fichero, "03 06 19 32 47 49\n");
  18.   fprintf(fichero, "08 12 20 34 47 50");
  19.    /*fprintf(fichero, "01 32 34 38 41 44\n03 06 19 32 47 49\n08 12 20 34 47 50");<== o este solo fprintf*/
  20.  
  21.   fclose(fichero);
  22. /**************************************************************************/
  23.   if ((fichero = fopen(NOM_ARCHIVO, "r")) == NULL){
  24.      perror(NOM_ARCHIVO);
  25.      return EXIT_FAILURE;
  26.   }
  27.    if ((fichero2 = fopen(NOM_ARCHIVO2, "w")) == NULL){
  28.      perror(NOM_ARCHIVO);
  29.      return EXIT_FAILURE;
  30.   }
  31.   while (fscanf(fichero,"%g %g %g %g %g %g", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5])==6){
  32.        for (i=0;i<6;i++)
  33.        printf ("v[%d]= %g ",i, v[i]);
  34.        puts("\n");puts("\n");
  35.        for (i=0;i<6;i++)
  36.            for (j=0;j<6;j++){
  37.                if (i!=j)
  38.                    a[i][j]=v[j];
  39.                else
  40.                    a[i][j]=v[i]+1;
  41.        }
  42.        fprintf (fichero2, "\n ");
  43.        for (i=0;i<6;i++){
  44.            for (j=0;j<6;j++){
  45.            printf ("%g ", a[i][j]);
  46.            fprintf (fichero2, "%g ", a[i][j]);
  47.            }fprintf (fichero2, "\n ");puts("\n");
  48.        }
  49.    }
  50.  
  51.   fclose(fichero);
  52.   fclose(fichero2);
  53.  
  54.   return EXIT_SUCCESS;
  55. }
  56.  
  57.  
Saluditos!.
P.D: Recuerda que los ficheros generados se encuentran en la misma carpeta donde está el código.



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


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: leosansan 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.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main () {
  8.    int i,j,v[6]={0},a[6][6];
  9. /***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
  10.    fstream myfile ("luis.txt");
  11.    if (myfile.is_open()){
  12.        myfile << "01 32 34 38 41 44\n";
  13.        myfile << "03 06 19 32 47 49\n";
  14.        myfile << "08 12 20 34 47 49\n";
  15.        myfile.close();
  16.    }
  17.    else cout << "\n Incapaz de crear o abrir el fichero \n";
  18. /**************************************************************************/
  19.    string line;
  20.    ifstream myfile1 ("luis.txt");
  21.    if (myfile1.is_open()){
  22.    ofstream myfile3 ("luis2.txt");
  23.    if (myfile3.is_open()){
  24.        myfile1 >>v[0] >>v[1]>>v[2] >>v[3]>>v[4] >>v[5];
  25.        while ( (!myfile1.eof())) {
  26.            for (i=0;i<6;i++)
  27.                cout << "v["<<i<<"] = "<<v[i] << "  ";
  28.            cout <<endl;
  29.            for (i=0;i<6;i++)
  30.                for (j=0;j<6;j++){
  31.                    if (i!=j)
  32.                        a[i][j]=v[j];
  33.                    else
  34.                        a[i][j]=v[i]+1;
  35.            }
  36.                myfile3 << "\n ";cout <<endl;
  37.                for (i=0;i<6;i++){
  38.                    for (j=0;j<6;j++){
  39.                        cout << a[i][j]<< " ";
  40.                        myfile3 <<  a[i][j] <<" ";
  41.                    }myfile3 << "\n ";cout <<endl;
  42.                }
  43.            myfile1 >>v[0] >>v[1]>>v[2] >>v[3]>>v[4] >>v[5];
  44.            }
  45.            myfile3.close();/**/
  46.        }
  47.        else cout << "\n Incapaz de crear o abrir el fichero \n";
  48.        myfile1.close();
  49.    }
  50.  else cout << "\n Incapaz de crear o abrir el fichero \n";
  51.  return 0;
  52. }
  53.  
  54.  
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. :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: luis456 en 13 Enero 2013, 09:11 am
Hola Leo

el codigo funciona de Pm pero en cuanto le pongo mas numeros manualmente no me sale nada, tampoco logro que lea el archivo con los registros que me hace el otro codigo tengo la idea de que en el nombre de  "  myfile3 " tiene que ver en algo ?

saludos

luis

Código:
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 << "09 13 22 38 45 49\n";<----------ya con esto no va ;)
      //  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"); <---------------------------------myfile3--el nombre no influye ?
    if (myfile3.is_open()){


Título: Re: Como hacer que tome registros este programa desde un txt y aplique la funcion
Publicado por: luis456 en 13 Enero 2013, 12:08 pm
Ya funciona :)

el problema era que cuando creo por primera ves los archivos txt los nombro Luis_C.txt y luis2_c.txt ni idea, pero se me ocurrió quitar los "  _c " y funciona de maravilla hace los calculos con cualquier cantidad de registros.


gracias

Luis