/* File: invertic.c */ /* Time-stamp: "2001-03-27 00:49:15 calvanes" */ /* Scopo: utilizzo della pila dei record di attivazione come memoria di lavoro */ /* Legge una sequenza di caratteri in ingresso e la inverte usando una funzione iterativa ed una ricorsiva. */ #include <stdio.h> #define LUNGMAX 10 typedef char TipoParola[LUNGMAX]; void invertiInputIterativa(void) /* Inverte una sequenza di caratteri letti in input. Versione iterativa */ { TipoParola parola; int lung = 0; int i; char ch; ch = getchar(); while (ch != '\n' && lung < LUNGMAX) { /* lettura e memorizzazione in un array */ parola[lung] = ch; lung++; ch = getchar(); } /* writeln('Sequenza invertita:'); */ for (i = lung-1; i >= 0; i--) /* stampa della sequenza invertita */ putchar(parola[i]); } /* invertiInputIterativa */ void invertiInputRicorsiva(void) /* Inverte una sequenza di caratteri letti in input. Versione ricorsiva */ { char ch; ch = getchar(); if (ch != '\n') { invertiInputRicorsiva(); /* chiamata ricorsiva */ putchar(ch); /* al ritorno dalla chiamata ricorsiva viene stampato il carattere letto */ } /* else printf("Sequenza invertita:\n"); */ } /* invertiInputRicorsiva */ int main(void) { printf("Immetti una sequenza di caratteri (lunga al piu' %d)!\n", LUNGMAX); invertiInputIterativa(); printf("\nImmetti una sequenza di caratteri (di lunghezza qualsiasi)!\n"); invertiInputRicorsiva(); putchar('\n'); return 0; } /* main */