Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C++]metodo che prende da file un dato alla volta.

    Salve, ho il seguente problema...
    Sto realizzando un programma che implementa alcuni algoritmi di ricerca euristica.
    All' algoritmo gli passo una configurazione iniziale del problema e ritorna la soluzione se esiste.
    Le configurazioni possibili del problema sono molte, moltissime (circa 200mila) e sono contenute in un file chiamato result.txt, ciascuna su una riga, ovvero:

    12345
    45678
    54621
    .
    .
    .
    45654

    Stavo pensando di creare un bel ciclo for con guardia < 200.000 e di passare al metodo risolvi una configurazione dopo l' altra...
    Come si fa a prendere da file un dato su una riga?
    E una volta esaminato passare al dato sulla riga successiva?

    Grazie per i suggerimenti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    è un po' che non scrivo in C++, ma vediamo se viene fuori qualcosa di utile

    codice:
    ifstream f ("nomefile.txt");
    long var;
    for (int i = 0; i < 200000; ++i)
    {
       f >> var;
       elabora (var);
    }
    //...
    f.close();
    prova e dimmi se va, spero di non aver scritto castronerie!

    N.B. Devi includere fstream.h o, se usi il namespace std, semplicemente fstream
    *********************************
    Andrea
    *********************************

  3. #3
    O.k., grazie.

  4. #4

    Prendere cifre da file e assegnarle ad un vettore

    Salve il problema è il seguente:
    ho un file in cui su ciascunsa riga ci sono 9 cifre. Io devo acquisire ciascuna cifra di una riga dal file ad un programma in cui c'è un vettore in cui il primo elemento deve essere la prima cifra, il secondo elemento è la seconda cifra, etc. etc.
    Una volta assegnata la riga al vettore ed elaborata, devo passare alla riga successiva.
    In pratica:

    file dati.txt:

    0 1 2 3 4 5 6 7 8 9
    8 4 3 2 1 5 9 0 7 6
    .
    .
    9 8 7 4 5 6 1 2 3 0


    programma elaborazione.cpp:

    ha un vettore int S[8]
    deve prendere le cifre della prima riga in modo che
    S[0]=0 S[1]=1 S[2]=2 S[3]=3 S[4]=4 S[5]=5 .....
    Una volta acquisiti i valori dal vettore devo elaborare il vettore, e su questo non ho problemi, scrivo il risultato su un file risultati.txt e poi passo alla seconda riga con:
    S[0]=8 S[1]=4 S[2]=3 S[3]=2 S[4]=1 S[5]=5.....


    Per quanto riguarda il formato delle cifre nelle righe del file dati.txt, può essere a mio piacimento:
    01234...
    0 1 2 3 4...
    0,1,2,3,4,...
    Userò il formato che è più utile per il codice.
    Vorrei capire come prenderle dal file,assegnarle al vettore e poi ripartire con la seconda riga.
    Spero di essere stato chiaro.
    Attendo suggerimenti.
    Grazie!

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    7
    non l' ho provato ma guarda un pò....

    #include <stdio.h>
    #include<iostream.h>
    #include<fstream.h>

    const int N=4;
    const int M=9;//

    int main()
    {
    int array [M][N];


    ifstream in;
    ofstream out;

    in.open("c:\\cartella\\sottocartella\\nomefile.txt ");//oppure se è nella cartella del programma solo nomefile
    //l'operatore >> separa gli interi,in questo caso,in lettura ponendo come separatore o tab
    //o un insieme di blank

    in.close();
    //codice di elaborazione degli array..
    out.open("nomefile.txt");

    for(int j=0;j<M;j++)
    {
    for(int z=0;z<N;z++)
    out<<array [j][z] ;
    out<<endl;
    }
    out.close();

    return 0;
    }

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Ho unito le discussioni aperte a riguardo visto che, sostanzialmente, si tratta dello stesso problema.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Pardon, forse non sono stato chiaro o non ho capito il tuo codice...
    Quello che a me interessa è prendere una riga alla volta e poterla mettere come argomento di un metodo per poterla elaborare...
    Per cui se nel file configurazioni.txt ho:
    ---------------------
    |1 2 3 4 5 6 7 8 9 |
    |2 3 1 4 5 6 8 9 7 |
    |5 4 6 7 9 8 1 3 2 |
    |3 5 2 1 4 7 6 8 9 |
    | .
    | .
    | .
    | .
    |9 8 5 6 4 8 7 2 1 |
    ----------------------

    A me serve un modo per poter prendere la prima riga e passarla ad un metodo elabora(array[9]) dove array[9] alla prima computazione del metodo elabora la prima riga, alla seconda la seconda riga, e così via...
    Ci sarà sicuramente un modo, ma forse sono ancora troppo pivello...
    Spero che a possa fare compassione a qualche master...

  8. #8
    Non sono molto esperto di c/c++ ma provo a darti una mano
    codice:
    #include <cstdio>
    #include <cstdlib>
    
    FILE *fp;
    int m[9];
    
    int main(){
    fp = fopen("file.txt", "r");
    fscanf(fp, "%d %d %d %d %d %d %d %d %d", &m[0], ...);
    elabora(m);
    }

  9. #9
    Provato..Grazie per l' impegno.. Ma ancora niente da fare...

  10. #10

    Come per "cin"

    Non ho capito il tuo problema ...
    Vuoi leggere più dati da una riga ?

    Sempre con fstream :

    fin >> V[0] >> V[1] ... ;

    prova dovrebbe funzionare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.