Algoritmo - Risoluzione di una epsressione intera

Sentenza1
Algoritmo espressione intera?
- Data un espressione composta da addizioni e sottrazioni (in cui si alternano con un numero e un operatore e che termina con il simbolo "=") calcola il risultato.

L'esercizio ci agevola dicendo:

1) E' possibile usare i costrutti iterativi "WHILE" e "DO-WHILE", ma NON "FOR";
3) Dopo aver scritto l'algoritmo, scrivere un analisi sul suo funzionamento.
4) Scriverlo in linguaggio di progetto, oppure C++, NO C o altri linguaggi.
5) Non è possibile usare variabili booleane;
6) Usare il ciclo con operatori di relazione (>,<,=,ecc..) e non con altre tecniche;
7) Non bisogna tener conto delle parentesi;

Io ne avevo pensato uno proprio usando i valori booleani e non usando operatori di relazione, e cioè:

#include <iostream>
 
using namespace std;
 
/**
 * Legge un numero
 * @param numero variabile in cui salvare il numero letto.
 * @return true, se la lettura ha avuto successo. false, altrimenti.
 */
bool leggi_numero (int& numero)
{
        cin >> numero;
        return cin.good();
}
 
int main()
{
        int somma = 0;
        int n;
       
        cout << "Inserisci l'espressione da valutare, terminata dal simbolo =" << endl
                << "L'espressione NON deve contenere spazi" << endl;
       
        while (leggi_numero(n))
                somma += n;
               
        cout << "Il risultato e' " << somma << endl;
       
        return 0;
}


Ma va contro alcuni punti.. mi sapreste aiutare a scriverne un altro, seguendo invece i punti dettati dal libro?

Risposte
apatriarca

L'esercizio ci agevola dicendo:

1) E' possibile usare i costrutti iterativi "WHILE" e "DO-WHILE", ma NON "FOR";
3) Dopo aver scritto l'algoritmo, scrivere un analisi sul suo funzionamento.
4) Scriverlo in linguaggio di progetto, oppure C++, NO C o altri linguaggi.
5) Non è possibile usare variabili booleane;
6) Usare il ciclo con operatori di relazione (>,<,=,ecc..) e non con altre tecniche;
7) Non bisogna tener conto delle parentesi;

Meno male che ti agevola... Mi sembrano un mare di ca**ate senza senso. Ma pazienza.. Il punto 4 immagino voglia semplicemente dire di usare iostream perché poi molte altre funzionalità non possono essere utilizzate. Il codice che hai scritto non fa in ogni caso quello che ti è stato chiesto per cui preoccuparsi di andare contro i punti mi sembra prematuro.

Vediamo quindi che cosa devi fare. L'utente inserisce un'espressione intera tipo:

23 + 5 - 6 + 11 - 4 - 7 =

e il tuo programma deve calcolarne il risultato. Come puoi notare (c'è anche scritto nel testo dell'esercizio) si alternano numeri e operatori. Il tuo ciclo dovrà quindi leggere un numero e un operatore e calcolare l'operazione corrente. Il ciclo dovrà terminare quando l'operatore è uguale a '='. Puoi farlo senza problemi usando sia un ciclo while che do..while e la condizione sarà qualcosa tipo op != '='. Rispetterà quindi le richieste. Immagino che tu possa ignorare gli errori di lettura, almeno alla prima stesura di questo esercizio.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.