Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
Sign in to follow this  
ggpp The Top

Programmazione

Recommended Posts

ggpp The Top

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:

Share this post


Link to post
Share on other sites

odjob

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

Share this post


Link to post
Share on other sites

TIBERIVS

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

Share this post


Link to post
Share on other sites

ggpp The Top

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:

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

ggpp The Top

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

ggpp The Top

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

Share this post


Link to post
Share on other sites

Meh
incuso
Staff

Certo, quando lo stampi lo stampi come carattere.

In C:

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

In C++

cout << a << endl;

Share this post


Link to post
Share on other sites

ggpp The Top

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:

Share this post


Link to post
Share on other sites

Mirko8710

Voi siete tutti matti... :rofl:

Share this post


Link to post
Share on other sites

ggpp The Top

Voi siete tutti matti... :rofl:

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

Share this post


Link to post
Share on other sites

Paleologo

Voi siete tutti matti... :rofl:

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

Share this post


Link to post
Share on other sites

Mirko8710

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

Share this post


Link to post
Share on other sites

g.aulisio

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

Share this post


Link to post
Share on other sites

ggpp The Top

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

g.aulisio

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

Share this post


Link to post
Share on other sites

luc21

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

Share this post


Link to post
Share on other sites

Meh
incuso
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

Share this post


Link to post
Share on other sites

g.aulisio

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

Share this post


Link to post
Share on other sites

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...
Sign in to follow this  

Lamoneta.it

La più grande comunità online di numismatica e monete. Studiosi, collezionisti e semplici appassionati si scambiano informazioni e consigli sul fantastico mondo della numismatica.

Hai bisogno di aiuto?

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