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

    [C] Stampare lettere una sola volta anche se si ripetono

    Salve ! Stavo provando a fare qst esercizio...quello che non va è che il programma dovrebbe stamparmi una sola volta tutte le lettere che si ripetono... esempio


    Se scrivo in input a a b b c lui mi deve stampare solo a b c ! Potreste aiutarmi a capire? Io ho un dubbio sul for che analizza il vettore vorrei avere un vostro consiglio!!




    codice:
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    void Pass( char *word,int n){
      fflush(stdin);
        for(int i=0;i<n;i++){
            printf("inserisci lettera n.%d: ",i+1);
            fflush(stdin);
            scanf("%c",&word[i]);
        }
        return;
        
    }
    
    
    void stampa( char *word,int n){
      
        int ris;
       for(int i=0;i<n-1;i++){
            if(word[i]!=word[i+1]){
                 printf("\nParola [%d]: %c",i+1,word[i]);
            }
            else{
              ris=1;
            }
        }
    return ;
    }
    
    
    int main(int argc, char **argv){
        int n;
       
    printf("Digita quante parole vuoi inserire: ");
        scanf("%d",&n);
        char *word=(char*)malloc(n*sizeof(char));
        Pass(word,n);
      stampa(word,n);
       free(word);
       
        return 0;
    }
    Ultima modifica di AmedeoFalco; 30-10-2017 a 22:30

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ciao, secondo me dovresti tener traccia dei caratteri che stampi, per poi di conseguenza decidere se stamparli o meno.
    Potresti usare un array per memorizzare lo stato "stampato-non stampato" dei vari caratteri.


    Qualcosa del genere:

    codice:
    /*Array contenente lo stato 
       l'array è composto da 127 elementi ognuno corrispondente al codice ascii "ristretto".
       Per accedere a un elemento dell'array, useremo il valore ascii del carattere.
       Esempio  stampato['A'] equivale a stampato[65]*/
    
    
     char stampato[127]={0}; //Usiamo il tipo char al posto di int, per risparmiare memoria
    void stampa(char*word,int n, int stampato[]){
      
       int i=0; 
       for( i=0;i<n;i++){
            if(stampato[word[i]]==0){
                 printf("\nParola [%d]: %c",i+1,word[i]);
                 stampato[word[i]]=1;
            }
            
        }
    
    }
    Ultima modifica di torn24; 31-10-2017 a 11:23 Motivo: Correzione
    Tecnologia

  3. #3
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Ciao, secondo me dovresti tener traccia dei caratteri che stampi, per poi di conseguenza decidere se stamparli o meno.
    Potresti usare un array per memorizzare lo stato "stampato-non stampato" dei vari caratteri.


    Qualcosa del genere:

    codice:
    /*Array contenente lo stato 
       l'array è composto da 127 elementi ognuno corrispondente al codice ascii "ristretto".
       Per accedere a un elemento dell'array, useremo il valore ascii del carattere.
       Esempio  stampato['A'] equivale a stampato[65]*/
    
    
     char stampato[127]={0}; //Usiamo il tipo char al posto di int, per risparmiare memoria
    void stampa(char*word,int n, int stampato[]){
      
       int i=0; 
       for( i=0;i<n;i++){
            if(stampato[word[i]]==0){
                 printf("\nParola [%d]: %c",i+1,word[i]);
                 stampato[word[i]]=1;
            }
            
        }
    
    }
    Posso inserire direttamente
    codice:
    char stampato [127]={0};
    Nel main ...ma il compilatore non mi direbbe che poi é impossibile convertire char in int quando lo passo alla funzione ??

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Ovviamente è stata una svista, dovrai usare il tipo char anche nella funzione.
    Il fatto che dobbiamo salvare i valori 0 e 1, quindi diventa solo uno spreco di memoria usare un int.
    Tecnologia

  5. #5

    Codice Intero

    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Ovviamente è stata una svista, dovrai usare il tipo char anche nella funzione.
    Il fatto che dobbiamo salvare i valori 0 e 1, quindi diventa solo uno spreco di memoria usare un int.
    Eccolo qui @torn24!! Grazie per avermi passato questo suggerimento !

    codice:
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    void Pass( char *word,int n){
      fflush(stdin);
        for(int i=0;i<n;i++){
            printf("inserisci lettera n.%d: ",i+1);
            fflush(stdin);
            scanf("%c",&word[i]);
        }
        return;
        
    }
    
    
    
    
    void stampa( char *word,int n,char stampato[]){
      
       for(int i=0;i<n;i++){
            if(stampato[word[i]]==0){ //Il carattere non'è stato ancora stampato
                 printf("\nParola [%d]: %c",i+1,word[i]);
                 stampato[word[i]]=1; //Carattere stamapato già
            }
        }
           
    return ;
    }
    
    
    
    
    int main(int argc, char **argv){
        int n;
       char stampato[127]={0};//Array contenente lo stato 
                              //l'array è composto da 127 elementi ognuno corrispondente al codice ascii "ristretto".
                              //Per accedere a un elemento dell'array, useremo il valore ascii del carattere.
                              //Esempio  stampato['A'] equivale a stampato[65]*/
    printf("Digita quante parole vuoi inserire: ");
        scanf("%d",&n);
        char *word=(char*)malloc(n*sizeof(char));
        Pass(word,n);
      stampa(word,n,stampato);
       free(word);
       
        return 0;
    }

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.