Jump to content
IGNORED

Programmazione


ggpp The Top

Recommended Posts

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:

Link to comment
Share on other sites

Awards

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

Link to comment
Share on other sites


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

Link to comment
Share on other sites


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:

Link to comment
Share on other sites

Awards

  • ADMIN
Staff

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.

Link to comment
Share on other sites


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

Link to comment
Share on other sites

Awards

  • ADMIN
Staff

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

Link to comment
Share on other sites


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

Link to comment
Share on other sites

Awards

  • ADMIN
Staff

Certo, quando lo stampi lo stampi come carattere.

In C:

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

In C++

cout << a << endl;

Link to comment
Share on other sites


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:

Link to comment
Share on other sites

Awards

Voi siete tutti matti... :rofl:

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

Link to comment
Share on other sites

Awards

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

Link to comment
Share on other sites

Awards

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

Link to comment
Share on other sites

Awards

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

Link to comment
Share on other sites

Awards

  • ADMIN
Staff

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.

Link to comment
Share on other sites


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

Link to comment
Share on other sites

Awards

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

Link to comment
Share on other sites


  • ADMIN
Staff

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

Link to comment
Share on other sites


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 by g.aulisio
Link to comment
Share on other sites

Awards

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue., dei Terms of Use e della Privacy Policy.