Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    45

    problema array

    ciao!
    il programma deve stampare quante volte una lettera dell'alfabeto è presente nella stringa
    "Questo è un esempio di testo per l'esercizio (03)." io l'ho fratto nel seguente modo:
    codice:
    #include<stdio.h>
    /*funzione principale*/
    int main(void)
    {
    	char a[]={"Questo è un esempio di testo per l'esercizio (03)."};
    	int b[26]={0};
    	int conta,i;
    
    for(i=0;sizeof (a)-1;i++){
    	conta = a[i]-'a';
    	if(conta<26 && conta>=0){
    		b[conta]++;
    	}
    }
    for(i=0;i<26; i++){
    	if(b[i]) printf("l'alfabet-%c conta-%d\n", 'a'+i, b[i]);
    }
    return 0;
    }
    non mi da errore solo che quando eseguo il programma si interrompe è nella finestra dell'output
    si visualizza :Eccezione non gestita a 0x01281401 in array alfa.exe: 0xC0000005: Violazione di accesso nella lettura del percorso 0x002b0000..
    perchè?
    eg

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

    ciao

    Sono solo un autodidatta e il tuo codice non lo capisco ,
    vorrei capire se ci sono molti errori o va bene cosi !
    per questo ti pongo delle
    domande scritte come commento sul tuo codice

    codice:
    #include<stdio.h>
    /*funzione principale*/
    int main(void)
    {                          // per inizializzare a non occorrono le graffe 
    	char a[]={"Questo è un esempio di testo per l'esercizio (03)."};
    	int b[26]={0}; //qui cosa intendi fare???
    	int conta,i;
    
    for(i=0;sizeof (a)-1;i++){ //quale è la condizione di uscita del for ?
    	conta = a[i]-'a';  // qui sottrai ai caratteri della stringa il carattere 'a' ??
    	if(conta<26 && conta>=0){
    		b[conta]++; //qui cosa dovrebbe fare ???
    	}
    }
    for(i=0;i<26; i++){
    	if(b[i]) printf("l'alfabet-%c conta-%d\n", 'a'+i, b[i]);
    }
    return 0;
    }

    Evidentemente in poco tempo sei diventata più brava di me ma mi interesserebbe
    capire il tuo programma se non presentasse orrori
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    * * editato dall'utente * *
    Per gli Spartani e Sparta usa spartan Il mio github

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

    Moderazione

    Originariamente inviato da egla
    problema array
    Questo titolo non va bene: manca il linguaggio ed è striminzito, cioè non contiene una descrizione significativa del problema.

    E' già il secondo che correggo (così puoi prendere spunto), ma in futuro provvedi tu, come indicato nel Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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

    hola

    Ho cercato di capire il tuo codice quindi
    controlli le sole lettere minuscole dalla a alla z
    e memorizzi quante volte presenti nella stringa in un array di 26 int
    leggi carattere per carattere la stringa
    sottrai al carattere letto 97
    se il risultato è 0 trattisi di a se è 1 b ecc...
    e in questo caso incrementi array di uno nel corrispettivo indice

    Be per uno che ha iniziato da poco te la cavi bene hai talento

    il problema nella codizione del for sizeof(a)-1 ti dice quanti caratteri hai
    ma non poni una condizione
    LA CONDIZIONE CORRETTA i <= sizeof(a)-1

    poi nell' ultimo if per stampare la condizione non mi è chiara
    e sembra anche inutile che ci sia


    codice:
    #include<stdio.h>
    /*funzione principale*/
    int main(void)
    {
    	char a[]="Questo è un esempio di testo per l'esercizio (03).";
    	int b[26];
    	int conta,i;
    for(i=0;i<26;i++)
           b[i]=0;
    for(i=0;i<=sizeof (a)-1;i++){
    	conta = a[i]-'a';
    	if(conta<26 && conta>=0){
    		b[conta]++;
    	}
    }
    for(i=0;i<26; i++){
    	if(b[i]!=0)printf("l'alfabet-%c conta-%d\n", 'a'+i, b[i]);
    }
    return 0;
    }
    Comunque voglio farti i miei complimenti secondo il mio parere hai talento
    l'unico errore era la condizione nel for
    da quanto tempo stai studiando il C ??
    Tecnologia

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: hola

    Be per uno che ha iniziato da poco te la cavi bene hai talento
    Penso che abbia "preso spunto" da quanto ho indicato in questo thread

    http://forum.html.it/forum/showthrea...readid=1492864

    per un problema simile (si vede che gli esercizi che fate sono sempre gli stessi ...).

    il problema nella condizione
    Il problema è in effetti quello ...

    poi nell' ultimo if per stampare la condizione non mi è chiara
    Serve ad elencare solamente le lettere che hanno avuto una frequenza maggiore di 0, non visualizzando tutte le altre.

    La cosa da cambiare è la stringa all'interno di

    printf("l'alfabet-%c conta-%d\n", 'a'+i, b[i]);

    perché non si capisce cosa voglia dire ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    egla, tu e torn state confondendo la nozione di lunghezza di una stringa con la nozione di dimensione di una variabile.
    Se hai una variabile a , che è un puntatore a char, sizeof(a) ritorna la dimensione di un puntatore.Cioè in genere 4 byte (ma dipende dalla macchina).
    Ciò significa che anche se hai una stringa a di 1000 caratteri, sizeof(a) sarà 4 byte per quella macchina.
    Invece è corretto verificare la lunghezza della stringa: strlen(a).

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

    ciao

    Sono contento che si sia ispirata a qualcosa già stato scritto ,
    altrimenti mi sarei buttato giù visto che non riuscivo a capire il codice .

    ho detto che vedevo del talento per molte ragioni
    inanzitutto non sapevo che inizializzare a zero gli elementi di un array
    si potesse fare array[]={0}; e credo che molti non lo sappiano
    poi il fatto di usare sizeof() per ricavare la lunghezza della stringa lo trovavo
    un tocco di classe , a tutti viene in mente di usare strlen me compreso .
    comunque visto che sizeof() restituisce il numero di byte e un carattere "corrisponde
    ad un byte " la cosa non è corretta ?

    senza sminuire nessuno perche del suo mi sembra che ne habbia messo
    Tecnologia

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    45
    turn,spero cosi sia più chiaro,
    ho modificato la condizione in i < sizeof (a)-1,come mi hai suggerito.

    codice:
    #include<stdio.h>
    /*funzione principale*/
    int main(void)
    {
    	/*inizializzo l'array se non metto le graffe mi da errore*/
    	char a[]={"Questo è un esempio di testo per l'esercizio (03)."};
    	int b[26]={0};/*rappresenta l'arrey alfabeto che lo inizializzo a zerro*/
    	int conta,i;
    
    for(i=0;i < sizeof (a)-1;i++){/*quando incontra il carattere NULLO esce dal ciclo for*/
    	conta = a[i]-'a';
    	if(conta<26 && conta>=0)
    		b[conta]++;/*a seconda della lettera incontrata incrementa di uno*/
    	
    }
    /*legge l'array b,stampa le lettere e il numero di volte 
    che esse sono presenti nella stringa memorizzata nell'array a*/
    for(i=0;i<26; i++){
    	if(b[i]!=0){
    		printf("l'alfabet-%c conta-%d\n", 'a'+i, b[i]);}
    }
    return 0;
    }
    cosi funziona!!
    eg

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    Re: ciao

    Originariamente inviato da torn24
    poi il fatto di usare sizeof() per ricavare la lunghezza della stringa lo trovavo
    un tocco di classe , a tutti viene in mente di usare strlen me compreso .
    comunque visto che sizeof() restituisce il numero di byte e un carattere "corrisponde
    ad un byte " la cosa non è corretta ?

    senza sminuire nessuno perche del suo mi sembra che ne habbia messo
    E' una cosa che ho sperimentato adesso, pensavo fosse sbagliato in tutti i casi.
    Invece :
    codice:
    int main(int argc, char **argv)
    {
        char s[]="ciao come stai ?";
        char *s1=s;
        printf("%d\n%d\n",sizeof(s),sizeof(s1));
        return 0;
    }
    Stampa rispettivamente 17 e 8 (perchè sul mio computer un puntatore ha dimensione 8 byte).

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.