Aiuto programma contatore

di il
11 risposte

Aiuto programma contatore

Salve tempo fa avevo fatto un programma che trovava il numero più alto e contava le ricorrenze in un vettore di numeri
#include <stdio.h>

#define NMAX 20

void main()
{
   int vett[NMAX];
   int n;     
   int x;   
   int i;   
   int max;
   int cnt; 

   printf("Numero di elementi del vettore: ");
   scanf("%d", &n);

   printf("Immettere da tastiera i %d elementi interi del vettore\n", n);
   for(i=0; i<=n-1; i++) {
      printf("Elemento in posizione [%d]: ", i);
      scanf("%d", &vett[i]);

   }
   max=vett[0];
   for (i=1;i<NMAX;i++)
   {
      if (vett[i]>max) {
         max=vett[i];
      }                               
   }
   printf("\nIl valore massimo e': %d",max);

   cnt=0;             
   for(i=0; i< n; i++)
      if(vett[i]==max)   
         cnt=cnt+1;

   printf("Il valore %d ricorre %d volte\n", max, cnt);
}
ora c'è qualcuno che sa come convertire qst programma per ricevere una stringra e un carattere e contare quante volte il carattere si ripete nella stringa?

11 Risposte

  • Re: Aiuto programma contatore

    La stringa è un array di char quindi vedilo come un semplice array

    typedef char stringa[N];

    stringa s ;

    s[0] --> primo carattere
    s[1] ->> seondoa
    ....
    s - > i-esimo carattere
  • Re: Aiuto programma contatore

    Forse ho capito male io, devo passare la parola intera non devo passare ogni singolo carattere, in pratica scrivo una parola, scrivo una lettera, e mi deve restituire quante volte la lettera è contenuta nella parola
  • Re: Aiuto programma contatore

    Puoi inserire la parola in una stringa ma utilizzarla cmq come un array normale
  • Re: Aiuto programma contatore

    Scusate ma non riesco proprio a modificarlo, non so come fare, qualcuno potrebbe scrivere il codice?
  • Re: Aiuto programma contatore

    Non ci va una scienza. Ale ti ha detto che char str[NMAX] definisce un array di caratteri che in C si può prendere come una stringa. le cose da cambiare sono quindi:
    
    da int vett[NMAX] a char vett[NMAX]
    lo scanf per prendere una stringa vuole il parametro %s quindi togli tutto il ciclo for e modifica il codice così
    printf("Immettere da tastiera la stringa\n");
            scanf("%s", vett);
    
    il valore massimo sarà  il carattere che succede tutti gli altri nella tabella ASCII.
     printf("\nIl valore massimo e': %c",max);
    
  • Re: Aiuto programma contatore

    Per prima cosa non c'è bisogno di offendere, "nn ci va una scienza" per te che fai solo qst, per uno come me a cui non serve niente qst programmazione altro che scienza, comunque scienza o non scienza io avevo chiesto un'altra cosa avevo scritto "in pratica scrivo una parola, scrivo una lettera, e mi deve restituire quante volte la lettera è contenuta nella parola". Se nn è possibile aiutarmi non fa niente ma offendere no.
  • Re: Aiuto programma contatore

    Sono arrivato a questo punto, però mi da un errore di codifica
    #include <stdio.h>
    #include <string.h>
    #define NMAX 20
    
    main()
    {
       char parola[NMAX];
       char l;
       int i;
       int cnt;
       int s;     
    
    printf("inserire una parola: ");
    gets(parola);
    s=strlen(parola);
    printf("%i",s);
    
    printf("\ninserire lettera: ");
    scanf("%c", &l);
    
    for(i=0;i<s;i++){
        if(parola[i]==l)   
        cnt=cnt+1;
                  }
    printf("la lettera %c e' ripetuta %d volte",l,cnt);
    getch();
    }   
       
    come posso risolverso?
  • Re: Aiuto programma contatore

    Lo
    printf("%i",s);
    l'ho messo solo per controllare non ha utilità per il programma.
  • Re: Aiuto programma contatore

    Ho trovato l'errore dovevo inizializzare cnt=0
  • Re: Aiuto programma contatore

    Se tu mi dici che hai fatto il programma iniziale, io ti dico che non ci va una scienza. Infatti basta farti una lettura dei primi passi della programmazione per capire i tipi di dati fondamentali. Non ti sto dicendo di stravolgere il programma e non capisco dovè l'offesa cmq lasciamo perdere.
    Un char non è altro che un tipo di dato che va da -128 a 127 oppure da 0 a 255 a seconda che sia definito come signed o unsigned. Queste sono le prime cosa da imparare nella programmazione, ed è per questo che io ti dico che non ci va una scienza perché è da qui che devi partire. Conoscere i tipi di dati fondamentali è essenziale per la programmazione.
    Una infarinatura la trovi quì:
    http://www.cplusplus.com/doc/tutorial/variables

    Mi fa piacere che ti impegni infatti hai trovato da solo la funzione strlen ma non te la prendere se uno ti dice che queste cose li devi già sapere.
  • Re: Aiuto programma contatore

    Attenzione alla gets


    Se leggi con attenzione vedrai che gets scandisce l'input e si ferma SOLO dopo aver trovato un \n. Il problema nasce dal fatto che lui non si ferma quando è finito lo spazio per contenere la stringa. Siccome la tua stringa può contenere NMAX - 1 caratteri (l'ultimo carattere è riservato per il fine stringa ovvero il \0) e la stringa di input è maggiore di questo valore, vai in buffer overflow.
    La soluzione sarebbe quella di usare fgets che come parametro ha anche il numero di caratteri da leggere dal file (in questo caso l'input stdin).
    Quindi la modifica da fare sarà del tipo:
    fgets(parola,NMAX-1,stdin)
    Infine siccome fgets aggiunge anche il \n nel buffer dovresti rimuoverlo.
    s = strlen(parola);
    if(parola[s-1] == '\n')
    {
       parola[s-1] = '\0';
       s--;
    }
Devi accedere o registrarti per scrivere nel forum
11 risposte