Astaroth (Normal User)
Newbie
Messaggi: 19
Iscritto: 03/01/2010
|
Ciao a tutti. Sono nuovo del forum.
Ho qualche difficoltà a creare un programma che legga da tastiera una sequenza di caratteri (al più di 50 elementi) terminata da un punto e li stampi a video nell’ordine inverso.
Questo è il codice che ho provato a scrivere (ma ci sono sicuramente degli errori, anche gravi forse). Mi potreste gentilmente dare una mano? (Senza usare funzioni di libreria).
Codice sorgente - presumibilmente C/C++ |
#include<stdio.h>
#include<stdlib.h>
main()
{
int i=0, j;
char str[50];
do{
scanf("%c", str[i]);
i++;
}while(i!=50 || str[i]!='.');
j=i;
for(i=0; i<j; i++)
{
printf("%c", str[j]);
j--;
}
system("pause");
return 0;
}
|
Quello che ho pensato io è creare un vettore di caratteri di 50 elementi. Inizializzo un contatore a 0 e con un ciclo do-while leggo da tastiera la sequenza di caratteri e incremento il contatore. Se il contatore è 50 oppure se il carattere è un punto, il ciclo dovrebbe terminare. A questo punto salvo il valore del contatore in un'altra variabile e con un ciclo for stampo i caratteri contenuti nel vettore partendo dall'ultimo. Ma non funziona... Che cosa sbaglio? Grazie.
Ultima modifica effettuata da Astaroth il 03/01/2010 alle 20:02 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
L'idea non è sbagliata, ma guarda le correzioni
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> #define MAX 50 int main() { int i=0, j; char str[MAX]; do { scanf("%c", &str[i++]); } while(i<MAX && str[i-1]!='.'); if(i<MAX) i--; for(j=i-1; j>=0; j--) printf("%c", str[j]); system("pause"); return 0; }
|
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Astaroth (Normal User)
Newbie
Messaggi: 19
Iscritto: 03/01/2010
|
Uh, grazie per le correzioni!
Posso chiederti però il perché del str[i++] dentro scanf()? Se nella condizione del while avessi messo i!=50 al posto di i<50 andava ugualmente bene?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da Astaroth:
Uh, grazie per le correzioni! |
Prego
Posso chiederti però il perché del str[i++] dentro scanf()? |
Parli del ++ o della str[...] ?
Se nella condizione del while avessi messo i!=50 al posto di i<50 andava ugualmente bene? |
Sì
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Astaroth (Normal User)
Newbie
Messaggi: 19
Iscritto: 03/01/2010
|
Postato originariamente da nessuno:
Parli del ++ o della str[...] ? |
Dell'insieme... str[i++]. Perché non solo str? Inserisci il carattere nell'elemento successivo... quindi l'elemento 0 lo salti? Ultima modifica effettuata da Astaroth il 03/01/2010 alle 22:40 |
|
ilmettiu (Ex-Member)
Pro
Messaggi: 88
Iscritto: 17/09/2009
|
str[i++] utilizza i e poi lo incrementa. Quello che dici tu sarebbe successo con str[++i]
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
L'operatore di postincremento utilizzato in
array[j++]
equivale a scrivere
array[j]
j++
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Astaroth (Normal User)
Newbie
Messaggi: 19
Iscritto: 03/01/2010
|
Grazie ad entrambi! Quindi quella è la forma contratta del codice che ho scritto.
Avrei un'ultima domanda... di logica...
Poiché la stringa deve essere lunga al massimo 50 caratteri OPPURE deve essere terminata da un punto, perché non si usa OR al posto di AND? Cioè, se voglio che solo una delle condizioni basti per terminare il ciclo while non devo usare || al posto di &&? La tabella di verità dell'OR dovrebbe essere questa:
0 0 --> 0
0 1 --> 1
1 0 --> 1
1 1 --> 1
Ultima modifica effettuata da Astaroth il 04/01/2010 alle 12:40 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Ti sfugge che nella while non c'è la condizione per terminare il ciclo.
C'è la condizione per ripetere il ciclo.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|