Vai al contenuto
IGNORED

Programmazione


Risposte migliori

Inviato

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:

Awards

Inviato

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


Inviato

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


Inviato

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:

Awards

  • ADMIN
Staff
Inviato

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.


Inviato

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

Awards

  • ADMIN
Staff
Inviato

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 ;)


Inviato

E fino a qua tutto okay :) Un ultima domanda, non posso farmi restituire (output) il valore in forma alfabetica?

Awards

  • ADMIN
Staff
Inviato

Certo, quando lo stampi lo stampi come carattere.

In C:

printf("%c\n",a);

In C++

cout << a << endl;


Inviato

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:

Awards

Inviato

Voi siete tutti matti... :rofl:

Awards

Inviato

Voi siete tutti matti... :rofl:

Non è la stessa cosa che direbbe un profano di un numismatico? :blum: :good:

Awards

Inviato

Voi siete tutti matti... :rofl:

Perché? Che c'è di strano? :lol:


Inviato

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...

Awards

Inviato

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...

Awards

Inviato

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

Awards

  • ADMIN
Staff
Inviato

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.


Inviato

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) :)

Awards

Inviato

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. ;)


  • ADMIN
Staff
Inviato

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


Inviato (modificato)

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...

Modificato da g.aulisio
Awards

Unisciti alla discussione

Puoi iniziare a scrivere subito, e completare la registrazione in un secondo momento. Se hai già un account, accedi al Forum con il tuo profilo utente..

Ospite
Rispondi a questa discussione...

×   Hai incollato il contenuto con la formattazione.   Rimuovere la formattazione

  Only 75 emoji are allowed.

×   Il tuo collegamento è stato incorporato automaticamente.   Mostra come un collegamento

×   Il tuo contenuto precedente è stato ripristinato..   Cancella editor

×   You cannot paste images directly. Upload or insert images from URL.

Caricamento...
×
  • Crea Nuovo...

Avviso Importante

Il presente sito fa uso di cookie. Si rinvia all'informativa estesa per ulteriori informazioni. La prosecuzione nella navigazione comporta l'accettazione dei cookie, dei Terms of Use e della Privacy Policy.