Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problemi con un programma in C++

    Salve, avrei un problema con lo svolgimento di un programma dove la traccia è la seguente:

    Sia dato un file di testo (come da esempio) che contiene una sequenza di parole.
    Si progettino (almeno) tre funzioni:
    - leggi_parole, che riceve in ingresso una stringa che contiene il nome di un file di testo e legge da questo file la sequenza di parole in esso contenuta, memorizzandola in un vettore di stringhe (vett_str);
    - crea_stringa_max che riceve in ingresso un vettore di stringhe (vett_str) ed il suo riempimento (riemp), e restituisce come parametro di uscita una nuova stringa (max_car) che contiene un carattere per ogni elemento del vettore vett_str. In particolare, ogni elemento di max_car dovrà essere il carattere più grande (nel senso lessicografico) contenuto nella corrispondente stringa di vett_str (vedi esempio che segue: il carattere più grande di ciascuna parola è visualizzato in grassetto). La funzione crea_stringa_max può utilizzare altre funzioni, opportunamente definite;
    - stampa_vett_str che stampa a video un vettore di stringhe (vedi esempio);
    e si scriva un programma che, dopo aver letto da tastiera il nome del file di testo e utilizzando la funzioni sopra descritte (ed eventuali altre), legga da questo file la sequenza di parole, la stampi a video, provveda a costruire la stringa max_car e la stampi a video.

    Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente le funzioni leggi_parole, crea_stringa_max, stampa_vett_str (ed eventuali altre funzioni) ed un terzo contenente il main.

    Esempio
    INPUT (da file di testo):
    ogni
    tanto
    porta
    dei
    miei
    doni

    OUTPUT (a video):
    Parole lette da file:
    ogni tanto porta dei miei doni

    Stringa ottenuta:
    ottimo

    INSERISCO IL MIO SVOLGIMENTO:

    codice:
     // libreria creata da me file lib.h
    const int MAX_ELEM=30;
    const int MAX_DIM=30;
    
    typedef char stringa [MAX_ELEM+1];
    typedef stringa vett_str [MAX_DIM];
    
    void leggi_parole ( vett_str, int &, const char*);
    void stampa_vett_str ( const vett_str, int);
    void crea_stringa_max (const vett_str, int, stringa);
    int strcmp ( const stringa, const stringa);
    void strcpy ( const stringa, stringa);
    
    
    // definizione delle funzioni lib.cpp
    #include <iostream>
    #include <cstdlib>
    #include "lib.h"
    using namespace std;
    
    
    void leggi_parole ( vett_str s, int & riemp, const char* filename) {
       int i;
       FILE* fp;
       fp= fopen (filename, "r");
       if(!fp){
          cout<< " il file " <<filename << " non e' stato trovato. impossibile proseguire l'elaborazione del programma\n";
          system ("pause");
          exit(1);
       }
       riemp=0;
       while ( ! feof (fp)){
          fscanf (fp, "%s", &s[riemp]);
          riemp++;
       }
       fclose(fp);
    }
    
    void stampa_vett_str ( const vett_str s, int riemp){
       int i;
       for (i=0; i<riemp; i++)
       cout << s[i] <<"\n";
    }
    
    void crea_stringa_max (const vett_str s, int riemp, stringa max){
       int i;
    
       for (i=0; i<riemp; i++){
          if(strcmp( s[i], s[i])>0)
          strcpy (s[i], max);
       }
    
       cout <<max;
    }
    
    void strcpy ( const stringa c, stringa str){
       int i=0;
       while (c[i] != '\0'){
          str[i]=c[i];
          i++;
       }
       str[i]='\0';
    }
    
    int strcmp(const char s[], const char t[]){
       int i=0;
       while (s[i]==t[i] && s[i]!='\0')
          i++;
       return s[i]-t[i];
    }
    
    // main.cpp
    #include <cstdlib>
    #include <iostream>
    #include "lib.h"
    using namespace std;
    
    int main(){
       vett_str s;
       int riemp;
       stringa max;
    
       leggi_parole ( s , riemp, "dati.txt");
       stampa_vett_str ( s, riemp);
    
       crea_stringa_max (s, riemp, max);
    
       system("PAUSE");
       return EXIT_SUCCESS;
    }

    Il programma cosi svolto legge solo da file ma non copia esattamente le lettere maggiori, quindi la parole OTTIMO non comprare a video. Grazie in anticipo.
    Ultima modifica di LeleFT; 11-02-2014 a 14:37 Motivo: Aggiunti tag CODE

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Secondo te questa linea

    if(strcmp( s[i], s[i])>0)

    cosa dovrebbe fare ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Secondo te questa linea

    if(strcmp( s[i], s[i])>0)

    cosa dovrebbe fare ?
    Sii non ha senso è vero, ho provato prima a fare altre cose ma senza criterio, se potete aiutarmi ne sarei molto grato

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 © 2025 vBulletin Solutions, Inc. All rights reserved.