ggpp The Top Posted April 28, 2013 Share #1 Posted April 28, 2013 Nel programma da fare per casa, dato un valore char dobbiamo sostituirlo il carattere che viene 3 lettere dopo. Quindi se è A deve diventare D (A+3). Avevo pensato di creare un vettore in char con tutti i caratteri dell'alfabeto e spostarmi in base al confronto prima e incremento dell'indice dopo. Ma non si potrebbe lavorare sul valore ASCII e quindi evitare la creazione del vettore? Per spiegarmi, A nel codice ASCII è 41, per trovare il valore 3 volte successivo basta fare 41+3. Non sto chiedendo di farmi il programma ma vorrei sapere se è fattibile come ragionamento e, in caso, come faccio a dire di incrementare il valore ASCII partendo dal carattere char Grazie in anticipo :good: Quote Link to comment Share on other sites More sharing options... Awards
odjob Posted April 28, 2013 Share #2 Posted April 28, 2013 Ciao ggpp hai preso troppo sole :crazy: La prossima volta,quando esci e c'è sole ti ci vuole un :hi: Spero che ti possa riprendere al più presto --odjob Quote Link to comment Share on other sites More sharing options...
TIBERIVS Posted April 28, 2013 Share #3 Posted April 28, 2013 Ciao ggpp hai preso troppo sole :crazy: La prossima volta,quando esci e c'è sole ti ci vuole un :hi: Spero che ti possa riprendere al più presto --odjob Strano oggi è nuvolo e piove....... TIBERIVS Quote Link to comment Share on other sites More sharing options...
ggpp The Top Posted April 28, 2013 Author Share #4 Posted April 28, 2013 Ciao ggpp hai preso troppo sole :crazy: La prossima volta,quando esci e c'è sole ti ci vuole un :hi: Spero che ti possa riprendere al più presto --odjob Visto che si tratta di programmazione mi aspettavo di averne preso troppo poco :D Qua c'è un bel cielo sereno Più vado avanti più mi rendo conto che per un "profano" è complicato capirci qualcosa... e queste sono ancora le basi :crazy: :crazy: :crazy: Quote Link to comment Share on other sites More sharing options... Awards
ADMIN incuso Posted April 28, 2013 Staff ADMIN Share #5 Posted April 28, 2013 Nel programma da fare per casa, dato un valore char dobbiamo sostituirlo il carattere che viene 3 lettere dopo. Quindi se è A deve diventare D (A+3). Avevo pensato di creare un vettore in char con tutti i caratteri dell'alfabeto e spostarmi in base al confronto prima e incremento dell'indice dopo. Ma non si potrebbe lavorare sul valore ASCII e quindi evitare la creazione del vettore? Per spiegarmi, A nel codice ASCII è 41, per trovare il valore 3 volte successivo basta fare 41+3. Non sto chiedendo di farmi il programma ma vorrei sapere se è fattibile come ragionamento e, in caso, come faccio a dire di incrementare il valore ASCII partendo dal carattere char Grazie in anticipo :good: Specificare il linguaggio di programmazione sarebbe però d'aiuto. In C/C++ le variabili di tipo char sono numeri interi. Se il problema presuppone l'uso dell'alfabeto inglese il ragionamento che fai è del tutto corretto e abzi come docente penalizzerei non poco in fase di valutazione l'uso di un vettore d'appoggio. Quote Link to comment Share on other sites More sharing options...
ggpp The Top Posted April 28, 2013 Author Share #6 Posted April 28, 2013 Specificare il linguaggio di programmazione sarebbe però d'aiuto. In C/C++ le variabili di tipo char sono numeri interi. Se il problema presuppone l'uso dell'alfabeto inglese il ragionamento che fai è del tutto corretto e abzi come docente penalizzerei non poco in fase di valutazione l'uso di un vettore d'appoggio. Il linguaggio è C/C++. Il problema è che non so come trattare la variabili alfabetiche per incrementarle secondo il mio ragionamento Quote Link to comment Share on other sites More sharing options... Awards
ADMIN incuso Posted April 28, 2013 Staff ADMIN Share #7 Posted April 28, 2013 Non esistono variabili alfabetiche. I char sono variabili scalari di tipo intero cioé numeri. Certo hanno un intervallo un po' limitato tipicamente tra -128 e 127. Quindi char a='a'; assegna alla variabile "a" un numero ovvero il codice ASCII della lettera a minuscola. puoi tranqullamente incrementarla con a+=3; dato che vuoi modificare solo le lettere meglio inoltre una cosa del genere #include<ctype.h> /* oppure #include<cctype> se usi il C++ */ ... if(isalpha(a)){ a=a+3; } Naturalmente nel tuo codice dopo l'incremento dovrai porti il problema se non sei andato troppo oltre la zeta. if(isalpha(a)){ a=a+3; if(a>'z') a-='z'-'a': } La cosa si fa piú complessa se devi considerare anche le lettere maiuscole. Ma questo lo lascio a te ;) Quote Link to comment Share on other sites More sharing options...
ggpp The Top Posted April 28, 2013 Author Share #8 Posted April 28, 2013 E fino a qua tutto okay :) Un ultima domanda, non posso farmi restituire (output) il valore in forma alfabetica? Quote Link to comment Share on other sites More sharing options... Awards
ADMIN incuso Posted April 28, 2013 Staff ADMIN Share #9 Posted April 28, 2013 Certo, quando lo stampi lo stampi come carattere. In C: printf("%c\n",a);In C++cout << a << endl; Quote Link to comment Share on other sites More sharing options...
ggpp The Top Posted April 28, 2013 Author Share #10 Posted April 28, 2013 No, ehm... ho fatto un piccolo errore io, avevo messo %d invece di %c :rofl: Me l'aspettavo più complicato, per il resto la funzione con il ritorno e passaggio di parametro la so fare. Grazie mille :good: Quote Link to comment Share on other sites More sharing options... Awards
Mirko8710 Posted April 29, 2013 Share #11 Posted April 29, 2013 Voi siete tutti matti... :rofl: Quote Link to comment Share on other sites More sharing options... Awards
ggpp The Top Posted April 29, 2013 Author Share #12 Posted April 29, 2013 Voi siete tutti matti... :rofl: Non è la stessa cosa che direbbe un profano di un numismatico? :blum: :good: Quote Link to comment Share on other sites More sharing options... Awards
Paleologo Posted April 29, 2013 Share #13 Posted April 29, 2013 Voi siete tutti matti... :rofl: Perché? Che c'è di strano? :lol: Quote Link to comment Share on other sites More sharing options...
Mirko8710 Posted April 30, 2013 Share #14 Posted April 30, 2013 Perché? Che c'è di strano? :lol: Giuro che ho letto i post...e mentre lo facevo mi veniva in mente..."Ptoooor....figlio di Kmeeeer" con tutte quelle sigle... :lol: Beati voi che ci capite... Quote Link to comment Share on other sites More sharing options... Awards
g.aulisio Posted April 30, 2013 Share #15 Posted April 30, 2013 Specificare il linguaggio di programmazione sarebbe però d'aiuto. In C/C++ le variabili di tipo char sono numeri interi. Se il problema presuppone l'uso dell'alfabeto inglese il ragionamento che fai è del tutto corretto e abzi come docente penalizzerei non poco in fase di valutazione l'uso di un vettore d'appoggio.Perché?A me al contrario sembra un esercizio finalizzato all'utilizzo dei vettori... che tra l'altro a mio avviso offrono in questo caso una soluzione più aperta e di utilizzo più generale. Volendo fare una cosa elegante @@ggpp The Top potrebbe proporre entrambe le soluzioni... un figurone... Quote Link to comment Share on other sites More sharing options... Awards
ggpp The Top Posted April 30, 2013 Author Share #16 Posted April 30, 2013 L'idea del vettore la ritengo scontata, però come idea non è cattiva... a questo punto potrei fare uno switch in cui è l'utente a scegliere la modalità d'esecuzione Quote Link to comment Share on other sites More sharing options... Awards
ADMIN incuso Posted April 30, 2013 Staff ADMIN Share #17 Posted April 30, 2013 Perché? A me al contrario sembra un esercizio finalizzato all'utilizzo dei vettori... che tra l'altro a mio avviso offrono in questo caso una soluzione più aperta e di utilizzo più generale. Fondamentalmente perché io sono perfido quando correggo :D L'uso di un vettore d'appoggio è piú inefficiente a fronte di un vantaggio nullo dal punto di vista della complessità del codice. Infatti in C non esistono array associativi e va da sé che il valore di quel char lo devi manipolare sottraendo qualcosa e allora già che ci sei tanto vale sommare 3. Quote Link to comment Share on other sites More sharing options...
g.aulisio Posted April 30, 2013 Share #18 Posted April 30, 2013 Fondamentalmente perché io sono perfido quando correggo :D L'uso di un vettore d'appoggio è piú inefficiente a fronte di un vantaggio nullo dal punto di vista della complessità del codice. Infatti in C non esistono array associativi e va da sé che il valore di quel char lo devi manipolare sottraendo qualcosa e allora già che ci sei tanto vale sommare 3. Siamo d'accordo sull'inefficienza relativa (ma mi sembrerebbe alquanto strano che dando esercizi di tal genere si dia anche l'obiettivo di scrivere del codice ottimizzato, quanto, ritengo, piuttosto quello di comprendere l'utilizzo di strutture elementari). Ma il punto debole della soluzione che si basa sulla conversione ASCII é che questa non funziona, per fare un esempio, con l'alfabeto italiano, né con alcun altro alfabeto che non sia l'inglese. Quella basata sui vettori funziona sempre. Per questo motivo, al contrario di te, avrei giudicato molto male l'escamotage della conversione ASCII, dato che non risolve il problema (o meglio puo' risolverlo solo in un caso particolare, quello di utilizzo dell'alfabeto inglese, il che non é specificato nel problema). Ma non c'é pericolo, sono ormai 24 anni che sono fuori dal giro (della docenza) :) Quote Link to comment Share on other sites More sharing options... Awards
luc21 Posted April 30, 2013 Share #19 Posted April 30, 2013 Secondo me la soluzione del vettore è la migliore ed è universale su tutti i linguaggi/piattaforme; puoi esportare il programma in tutti gli ambienti (per es. da dipartimentale a Mainframe) e funziona. Inoltre puoi passare da ASCII a EBCDIC senza problemi. ;) Quote Link to comment Share on other sites More sharing options...
ADMIN incuso Posted April 30, 2013 Staff ADMIN Share #20 Posted April 30, 2013 L'EBCDIC lo avevo proprio relegato in un recesso della mente! Vabbe' ma spero non si usi piú! Sulle lettere accentate non userei i char pena l'incompatibilità con quasi tutto :D Quote Link to comment Share on other sites More sharing options...
g.aulisio Posted April 30, 2013 Share #21 Posted April 30, 2013 (edited) La stragrande maggioranza delle transazioni vengono ad oggi eseguite su z/OS (potenza dell'IBM), di conseguenza l'EBCIDIC é ben lungi dall'essere relegato in un angolo. Al contrario. Possiamo dire che é lo standard di codifica binaria maggiormente utilizzato dal software che sta girando in questo momento nel mondo. Anche se non dà nell'occhio... Per quel che riguarda l'utilizzo di caratteri latini accentati, italiani, francesi, turchi, ungheresi, polacchi ecc., o di caratteri alfabetici non latini (cirillici -russo, ucraino, serbo, bulgaro, ecc-, greco, arabo, farsi, ebraico) il discorso (in C o in java) viene gestito facendo ricorso alle codifiche ISO o UTF-8. Certo, per l'arabo il farsi e l'ebraico c'é qualche complicazione in più, ma non trascendentale. Per i caratteri sillabici (quale i cinesi -tradizionale e semplificato-, coreano, giapponese, ecc) il discorso é ancora diverso. Aggiunta: In ogni caso le conversioni ASCII - EBCDIC sono ormai da decenni il pane quotidiano per chi lavora in ambiente open, dato che "dietro", nel 90 per cento dei casi, c'é un mainframe... Edited April 30, 2013 by g.aulisio Quote Link to comment Share on other sites More sharing options... Awards
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.