Esercizio tabella ascii
Mi spiegate cosa vuole questo esercizio,non ci ho capito niente
"Leggere un carattere e determinare se è una cifra,una lettera minuscola,oppure una lettera maiuscola.Nei confronti non usare esplicitamente i codici ASCII,ma simboli tra apici singoli ('a', 'z' ecc.)".
Non sarei proprio da dove iniziare
"Leggere un carattere e determinare se è una cifra,una lettera minuscola,oppure una lettera maiuscola.Nei confronti non usare esplicitamente i codici ASCII,ma simboli tra apici singoli ('a', 'z' ecc.)".
Non sarei proprio da dove iniziare
Risposte
Ciao
per prima cosa dovresti indicare con quale linguaggio devi scrivere il programma
per prima cosa dovresti indicare con quale linguaggio devi scrivere il programma
Ciao, come da regolamento, dovresti modificare il titolo per indicare l'argomento del topic, e, soprattutto, proporre un tuo tentativo di soluzione!
"Summerwind78":
Ciao
per prima cosa dovresti indicare con quale linguaggio devi scrivere il programma
In c++
"Raptorista":
Ciao, come da regolamento, dovresti modificare il titolo per indicare l'argomento del topic, e, soprattutto, proporre un tuo tentativo di soluzione!
Mah,io avrei pensato di riconoscere se è un carattere,una maiuscola o una minuscola in base alla colonna decimale della tabella ascii.Cioè io immetto ad esempio 'a' , se questo è compreso tra 97 e 122 allora scrivo "è una minuscola".
Però di fondo c'è una cosa che non mi è chiara:sulla tabella sono riportati i simboli/lettere/caratteri speciali con il rispettivo codice,e inoltre il corrispondente numero ottale,esadecimale,binario e alfanumerico:questi ultimi a cosa servono?Cioè l'utente potrà immettere solo simboli/lettere/caratteri speciali con il comando (alt+codice decimale) o dovrà/potrà scriverne il codice anche in un'altra base?
Invece il programmatore quale di queste colonne dovrà tenere in considerazione?
Nessuna! Leggi il suggerimento nella traccia dell'esecizio: non usare direttamente i codici, ma le singole lettere.
Quindi se l'utente immette x, se x=a,o x=b,o x=c (insomma faccio un blocco switch) scrivo che è una minuscola?
Sì, ma non ti conviene assolutamente mettere tutti quegli switch..
C'è un modo più semplice, sfruttando l'ordinamento dei caratteri ASCII nella tabella!
C'è un modo più semplice, sfruttando l'ordinamento dei caratteri ASCII nella tabella!
"Raptorista":
Sì, ma non ti conviene assolutamente mettere tutti quegli switch..
C'è un modo più semplice, sfruttando l'ordinamento dei caratteri ASCII nella tabella!
Si può impostare allora: se (x>a) e (x
Ora sei sulla buona strada, ti manda di includere gli estremi

"Raptorista":
Ora sei sulla buona strada, ti manda di includere gli estremi
Uhm,ok,ci proverò.Quello che mi chiedo è come fa un calcolatore a sapere quali caratteri sono compresi tra a e z?
Dalla tabella! Ad ogni carattere è associato un numero, e con quelli si possono fare confronti in maniera usuale.
Allora,ho provato due modi(inutile dire che neanche uno è eseguibile
).
Dunque,il primo è
L'altro è:
Ci ho provato

Dunque,il primo è
#include <iostream> int main() { char x; std::cout<< " Inserisci un carattere/cifra: \n"; std::cout<< "=> "; std::cin>> x; switch (x) { case(x<='1';x>='9') : std::cout<<"è una cifra\n";breack; case(x>='A';x<='Z') : std::cout<< "è una maiuscola\n";breack; case(x>='a';x<='z') : std::cout<< "è una minuscola\n";breack; }; return 0; }
L'altro è:
#include <iostream> int main() { char x; std::cout<< " Inserisci un carattere/cifra: \n"; std::cout<< "=> "; std::cin>> x; if (x>='0',x<= '9') { std::cout<<"è una cifra\n"; } else if (x>='A';x<='Z') { std::cout<< "è una maiuscola\n"; } if (x>='a';x<='z') { std::cout<< "è una minuscola\n"; }; return 0; }
Ci ho provato

"Mifert4":
Allora,ho provato due modi(inutile dire che neanche uno è eseguibile).
Dunque,il primo è#include <iostream> int main() { char x; std::cout<< " Inserisci un carattere/cifra: \n"; std::cout<< "=> "; std::cin>> x; switch (x) { case(x<='1';x>='9') : std::cout<<"è una cifra\n";breack; case(x>='A';x<='Z') : std::cout<< "è una maiuscola\n";breack; case(x>='a';x<='z') : std::cout<< "è una minuscola\n";breack; }; return 0; }

Il case inoltre in questo modo non l'ho mai visto usare, come se stessi impostando degli intervalli. In genere lo switch è segnato per evitare una lista di else if in cui poni il test "x = a" per diversi "a". Inoltre il mancato uso del break può anche servire per varie ragioni. Questo non è il caso in cui switch va usato.
"Mifert4":
L'altro è:
#include <iostream> int main() { char x; std::cout<< " Inserisci un carattere/cifra: \n"; std::cout<< "=> "; std::cin>> x; if (x>='0',x<= '9') { std::cout<<"è una cifra\n"; } else if (x>='A';x<='Z') { std::cout<< "è una maiuscola\n"; } if (x>='a';x<='z') { std::cout<< "è una minuscola\n"; }; return 0; }
Ci ho provato
Cosa ti fa pensare che (x>='a';x<='z') sia il giusto modo per segnare la congiunzione di due test?
Quello corretto è
(x>='a')&&(x<='z')
A me funziona solo scrivendo
('0'<= x and x<= '9')come mai?
non credo, penso che funzioni solo come vict85.
Forse potrebbe anche funzionare come dici tu, ma la sintassi indicata da vict85 è la corretta sintassi C ANSI che quindi ogni compilatore C e C++ deve interpretare correttamente
Forse potrebbe anche funzionare come dici tu, ma la sintassi indicata da vict85 è la corretta sintassi C ANSI che quindi ogni compilatore C e C++ deve interpretare correttamente
"Summerwind78":
non credo, penso che funzioni solo come vict85.
Forse potrebbe anche funzionare come dici tu, ma la sintassi indicata da vict85 è la corretta sintassi C ANSI che quindi ogni compilatore C e C++ deve interpretare correttamente
Guarda,se è per questo il mio compilatore non mi accetta neanche
<<endlin nessuna occasione, o
using namespace std
Se non accetta nessuna delle istruzioni corrette del C++ sopra elencate ti consiglio di cambiare il tuo compilatore. Ma mi pare avessi detto di usare g++ sotto Ubuntu, che è un compilatore più che valido e che accetta sicuramente tutte quelle espressioni. L'errore è quindi in qualche modo probabilmente tuo. Come compili il codice?
Esiste comunque un solo modo realmente portabile di risolvere questo problema ed è il seguente:
Non è infatti assolutamente garantito che la codifica usata dal C sia ASCII e le lettere minuscole e maiuscole di un linguaggio sono diverse da quelle di un altro (considera le lettere accentate o la œ francese o la ä tedesca).
Esiste comunque un solo modo realmente portabile di risolvere questo problema ed è il seguente:
#include <cctype> #include <iostream> int main(void) { std::cout << "Inserisci un carattere/cifra e premi invio: "; char c = 0; std::cin >> c; if (std::isdigit(c)) { std::cout << c << " e' una cifra.\n"; } else if (std::isupper(c)) { std::cout << c << " e' una maiuscola.\n"; } else if (std::islower(c)) { std::cout << c << " e' una minuscola.\n"; } }
Non è infatti assolutamente garantito che la codifica usata dal C sia ASCII e le lettere minuscole e maiuscole di un linguaggio sono diverse da quelle di un altro (considera le lettere accentate o la œ francese o la ä tedesca).
@apatriarca: Per la precisione in tedesco si definiscono lettere con "Umlaut" o "dieresi" 
Su questo gioco in casa vista la mia residenza

Su questo gioco in casa vista la mia residenza

"apatriarca":
Se non accetta nessuna delle istruzioni corrette del C++ sopra elencate ti consiglio di cambiare il tuo compilatore. Ma mi pare avessi detto di usare g++ sotto Ubuntu, che è un compilatore più che valido e che accetta sicuramente tutte quelle espressioni. L'errore è quindi in qualche modo probabilmente tuo. Come compili il codice?
Esiste comunque un solo modo realmente portabile di risolvere questo problema ed è il seguente:
#include <cctype> #include <iostream> int main(void) { std::cout << "Inserisci un carattere/cifra e premi invio: "; char c = 0; std::cin >> c; if (std::isdigit(c)) { std::cout << c << " e' una cifra.\n"; } else if (std::isupper(c)) { std::cout << c << " e' una maiuscola.\n"; } else if (std::islower(c)) { std::cout << c << " e' una minuscola.\n"; } }
Ho scaricato molti esercizi del mio professore,che venivano correttamente eseguiti solo dopo aver sostituito a endl "\n" e ogni volta a "using namespace std" std::,altrimenti mi diceva qualcosa del tipo"endl is not declared for this scope".Credo di potermi fidare degli esercizi di un professore laureato in ingegneria informatica...spero

Per quanto riguarda il tuo codice mi spiegheresti queste righe:
#include <cctype>
int main(void)
(std::islower(c))
(std::isupper(c))
std::isdigit(c)
non li ho mai visti
#include : sai cosa è un #include?
int main(void): non lo hai mai visto??? come lo scrivi tu il corpo principale di un programma in c?
le altre tre funzioni sono funzioni che ti ritornano true o false a seconda che il parametro che fornisci sia
una lettera minuscola -> (std::islower(c))
una lettera maiuscola -> (std::isupper(c))
una cifra -> (std::isdigit(c))
int main(void): non lo hai mai visto??? come lo scrivi tu il corpo principale di un programma in c?
le altre tre funzioni sono funzioni che ti ritornano true o false a seconda che il parametro che fornisci sia
una lettera minuscola -> (std::islower(c))
una lettera maiuscola -> (std::isupper(c))
una cifra -> (std::isdigit(c))
"Summerwind78":
#include: sai cosa è un #include?
Si,certo,ma cosa contiene la libreria cctype?
"Summerwind78":
int main(void): non lo hai mai visto??? come lo scrivi tu il corpo principale di un programma in c?
Così: int main()
Ciao! Sono il tuo Tutor AI, il compagno ideale per uno studio interattivo. Utilizzo il metodo maieutico per affinare il tuo ragionamento e la comprensione. Insieme possiamo:
- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Il Tutor AI di Skuola.net usa un modello AI di Chat GPT.
Per termini, condizioni e privacy, visita la relativa pagina.
Per termini, condizioni e privacy, visita la relativa pagina.