Rimuovere parole con duplicati - C

di il
71 risposte

71 Risposte - Pagina 4

  • Re: Rimuovere parole con duplicati - C

    Si si io ho provato, e non funzionava.
    ho modificato il programma per farlo andare e ti ho postato il cambiamento
  • Re: Rimuovere parole con duplicati - C

    Rileggi la consegna...
  • Re: Rimuovere parole con duplicati - C

    Scrivere un programma C che apre un file di testo testo.txt contenente una serie di lunghezza
    indefinita (zero o più) di parole ciascuna lunga al massimo 15 caratteri. Il programma analizza
    ciascuna parola mediante il sottoprogramma analizzastringa e stampa a video le parole in cui
    la lettera iniziale compare una sola volta.

    questo è il testo dell'esercizio, il mio programma prende la prima lettera iniziale di ogni parola e vede se si ripete, se si ripete non mi mette a video la parola.
    uso numero = 2 perché nell'if del sottoprogramma ho posto che cont deve essere < del numero.

    non riesco a capire dove sbaglio, a me sembra giusto.
  • Re: Rimuovere parole con duplicati - C

    Ma lo fai apposta?
    Leggila "tutta" la consegna
  • Re: Rimuovere parole con duplicati - C

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define dim 20
    #define max_s 100
    
    
    
    
    
    int analizzastringa(char s[], char c, int a ){
    	int i;
    	int len;
    	int conteggio=0;	
    	int risultato;
    	len=strlen(s);
    	
    	for(i=0; i<len; i++){
    		if(s[i]==c){
    			conteggio++;			
    		}	
    	}
    	
    	if(conteggio<=a){
    		risultato=1;
    		}else{
    		risultato=0;
    		}
    		
    		return risultato;
    	
    }
    
    int main(){
    	
    	char riga[dim]={0};
    	FILE * fp;
    
    	
    	fp= fopen("ciao.txt", "r");
    	
    		if(fp==NULL){
    			printf("errore nell'apertura del file");
    		
    		}else{
    			
    			while(fscanf(fp,"%s",riga)!=EOF) {	
    				if(analizzastringa(riga,riga[0],1)==1){	
    					printf("%s ", riga);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    }
    ok riletto, ora credo di aver risolto... anche il sottoprogramma rispetta la consegna.
  • Re: Rimuovere parole con duplicati - C

    Controlla
    è facile
    eseguilo su una seria di stringhe e test ben conosciuti e facili

    se lo farai scoprirai che "anche" questa versione è sbagliata
  • Re: Rimuovere parole con duplicati - C

    Ricapitolando

    Primo post
    a) Scrivere un sottoprogramma C analizzastringa che riceve come parametri un array di
    caratteri str, un carattere c ed un intero conteggio. Il sottoprogramma conta il numero di caratteri
    uguali a c in str. Se il numero è uguale a conteggio, il sottoprogramma ritorna 1, altrimenti
    ritorna 0.
    Soluzione proposta a fine di pagina 1 (modificando il tuo codice)
    int analizzastringa(char s[], char c, int a){
    	int i;
    	int len=strlen(s);
    	int conteggio=0;	
    	for(i=0; i<len; i++)
    		if(c==s[i])
    			conteggio++;					
    	if(conteggio==a)
    		return 1;		
    	return 0;
    }
    Tua soluzione a pagina 4:
    int analizzastringa(char s[], char c, int a ){
    	int i;
    	int len;
    	int conteggio=0;	
    	int risultato;
    	len=strlen(s);
    	
    	for(i=0; i<len; i++){
    		if(s[i]==c){
    			conteggio++;			
    		}	
    	}
    	
    	if(conteggio<=a){
    		risultato=1;
    		}else{
    		risultato=0;
    		}
    		
    		return risultato;
    }
    Com'è che dopo quattro pagine ancora non hai adottato la soluzione corretta e insisti con conteggio <=a ?

    Se lo stai facendo apposta... il gioco è bello quando dura poco. Se non lo stai facendo apposta allora hai un problema di deficit di attenzione, più che di programmazione. Non c'è nessuno che ti segue?
  • Re: Rimuovere parole con duplicati - C

    Weierstrass ha scritto:



    Se non lo stai facendo apposta allora hai un problema di deficit di attenzione, più che di programmazione. Non c'è nessuno che ti segue?
    Tralasciando questa parte che non è una cosa molto bella da dire ad un altra persona... il problema era tutto li?
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define dim 20
    #define max_s 100
    
    int analizzastringa(char s[], char c, int a ){
    	int i;
    	int len;
    	int conteggio=0;	
    	int risultato;
    	len=strlen(s);
    	
    	for(i=0; i<len; i++){
    
    		if(c==s[i]){
    			conteggio++;			
    		}	
    	}
    	
    	if(conteggio==a){
    		risultato=1;
    		}else{
    		risultato=0;
    		}
    		
    		return risultato;
    	
    }
    
    int main(){
    	
    	char riga[dim]={0};
    	FILE * fp;
    
    	
    	fp= fopen("ciao.txt", "r");
    	
    		if(fp==NULL){
    			printf("errore nell'apertura del file");
    		
    		}else{
    			
    			while(fscanf(fp,"%s",riga)!=EOF) {	
    				if(analizzastringa(riga,riga[0],1)==1){	
    					printf("%s ", riga);
    				}else{
    				}	
    			}
    		}
    
    	fclose(fp);
    
    	return 0;
    }
    comunque non c'è bisogno di scaldarsi tanto, sono sempre stato in buona fede e semplicemente non capivo dove stava l'errore... non volevo farvi arrabbiare.
  • Re: Rimuovere parole con duplicati - C

    No

    non dopo che ti ho detto tre volte di leggere la consegna
    e NON lo hai fatto, anzi, hai letto SOLO la parte che non c'entrava
    non puoi parlare di buona fede,
  • Re: Rimuovere parole con duplicati - C

    Vabbe, dai, dopo tutto il lavoro che ho fatto me lo concedete di pubblicare la versione che usavo per le prove?
  • Re: Rimuovere parole con duplicati - C

    Mi spiace che la pensiate così, sono qui per imparare e non avrei motivo di far perdere inutilmente il mio e il vostro tempo... se continuavo a postare la soluzione sbagliata è perché effettivamente non comprendevo dove stava l'errore.
    vi ringrazio comunque per avermi segnalato il problema.
  • Re: Rimuovere parole con duplicati - C

    ragazzo1223 ha scritto:


    Weierstrass ha scritto:



    Se non lo stai facendo apposta allora hai un problema di deficit di attenzione, più che di programmazione. Non c'è nessuno che ti segue?
    Tralasciando questa parte che non è una cosa molto bella da dire ad un altra persona...
    Guarda che non te l'ho detto per offenderti: sono genitore pure io e sono problemi risolvibili, non c'è niente di cui vergognarsi... però ti deve seguire qualcuno di persona se davvero fai tutta questa fatica
  • Re: Rimuovere parole con duplicati - C

    Visto che ormai sono state pubblicate tante versioni, compresa una corretta, pubblico la mia:
    
    #include <stdio.h>
    #define DIM 20
    
    int analizzastringa(char s[], char c, int a)
    {
       int i = 0;
    
       while(s[i])
       {
          a = a - (s[i++] == c);
       }
    
       return (!a);
    }
    
    int main()
    {
       char stringa[DIM] = {0};
       FILE * fp;
    
       if(!(fp = fopen("ciao.txt", "r")))
       {
          printf("Errore nell'apertura del file");
          return 1;
       }
    
       while(fscanf(fp, "%s", stringa) != EOF)
       {
          if(analizzastringa(stringa, stringa[0], 1))
          {
             printf("%s ", stringa);
          }
       }
    
       fclose(fp);
       printf("\n");
       return 0;
    }
    
    si può notare come scorro la stringa, senza un contatore
    e come eseguo sia il de-conteggio dei caratteri che il test di restituzione
    la parte di main invece è abbastanza banale
    tutto questo per dire cosa?
    non per fare la figura di quello bravo, non lo sono, anzi, sono un "programmatore giocattolo", ma per indicare che se si evita di sprecare tempo in interpretazioni sbagliate del testo e ci si concentra sulla consegna (e solo su quella) si può ottenere molto, la mia funzione non conta i caratteri, si limita a verificare che il loro numero corrisponda o no alla richiesta, che è "esattamente" la consegna

    per lo OP: non credo che tu lo faccia apposta, ma hai dei "grossi" ma proprio "GROSSI" problemi a comprendere quello che leggi, devi applicarti di più, MOLTO di più

    ah, già che ci sono, il programma di test per la funzione, sempre realizzare dei test per le funzioni che si scrivono, un'altro dei problemi dello OP è qui.
    
    #include <stdio.h>
    #include <string.h>
    #define dim 20
    
    int analizzastringa(char s[], char c, int a)
    {
       int i;
       int len;
       int conteggio = 0;
       int risultato;
       len = strlen(s);
    
       for(i = 0; i < len; i++)
       {
          if(s[i] == c)
          {
             conteggio++;
          }
       }
    
       if(conteggio <= a)
       {
          risultato = 1;
       }
    
       else
       {
          risultato = 0;
       }
    
       return risultato;
    }
    
    
    typedef struct
    {
       char parola[15];
       char carattere ;
       int numero;
    
    } test;
    
    test prove[] =
    {
       {{"unac"}, 'c', 1}
       , {{"duecc"}, 'c', 1}
       , {{"duecc"}, 'c', 2}
       , {{"unav"}, 'c', 1}
       , {{"trevvv"}, 'v', 1}
       , {{"trevvv"}, 'v', 5}
    };
    #define dimensione sizeof(prove)/sizeof(test)
    
    
    int main()
    {
       for(int i = 0; i < dimensione; i++)
       {
          printf("Controllo se in %s ci sono esattamente %d lettere %c:\n", prove[i].parola, prove[i].numero, prove[i].carattere);
    
          if(analizzastringa(prove[i].parola, prove[i].carattere, prove[i].numero))
          {
             printf("Si', ci sono esattamente %d lettere %c\n", prove[i].numero, prove[i].carattere);
          }
    
          else
             printf("No, non c'è il giusto numero di lettere %c\n", prove[i].carattere);
       }
    
       printf("\n");
       return 0;
    }
    
    dove si notano due cose:
    primi che lo OP non usa le maiuscole nelle macro, problema minore ma problema
    secondo che ho dovuto aggiungere la libreria string.h
    possibile che non gli sia mai nemmeno uscito un warning per l'uso di una funzione non inclusa?
    evidentemente lo OP non prende in considerazione nulla di quello che noi o il compilatore gli dicono
    compreso quando gli ho detto che i warning hanno la loro importanza......
  • Re: Rimuovere parole con duplicati - C

    Weierstrass ha scritto:




    Guarda che non te l'ho detto per offenderti: sono genitore pure io e sono problemi risolvibili, non c'è niente di cui vergognarsi... però ti deve seguire qualcuno di persona se davvero fai tutta questa fatica
    io no, io sono zio,
    ma capisco benissimo lo stesso
  • Re: Rimuovere parole con duplicati - C

    Weierstrass ha scritto:


    ragazzo1223 ha scritto:


    Weierstrass ha scritto:



    Se non lo stai facendo apposta allora hai un problema di deficit di attenzione, più che di programmazione. Non c'è nessuno che ti segue?
    Tralasciando questa parte che non è una cosa molto bella da dire ad un altra persona...
    Guarda che non te l'ho detto per offenderti: sono genitore pure io e sono problemi risolvibili, non c'è niente di cui vergognarsi... però ti deve seguire qualcuno di persona se davvero fai tutta questa fatica
    tranquillo, non ho nessun problema del genere... e che mi sveglio ogni mattina alle 8 e studio fino a tardi a causa degli esami, arrivo la sera che sono un po' intontito e la mia concentrazione cala... sono un umano pure io.


    standard io la libreria string.h l'ho messa in tutti i codici che ho postato qui sul sito, il mio ide non compila nemmeno se non ha tutte le librerie che servono.
Devi accedere o registrarti per scrivere nel forum
71 risposte