Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [C++] Un paio di righe di codice da analizzare

    Salve a tutti, sempre io a rompere, ma sarà l'ultima volta, promesso.
    Mi serviva una minuscola mano che mi spiegasse "in modo informatico" (ossia perchè accade quel che accade, od ancora in parole povere: perchè è stato scritto così), questa parte di codice:
    codice:
    {
     res = primo();
     if (res) return res;
     cout << "\nPremi c per continuare o qualunque altro tasto per terminare. ";
     cin >> again;
     }
    facente parte dell'intero codice qui riportato:

    codice:
     #include <iostream>
     #include <stdlib.h>
     using namespace std;
    
     int primo()
     {
     long long p;
     int divisori = 0;
     cout << "Digita un numero intero positivo: \n\n", cin >> p;
     if (p < 0)
     cout << "\nNon fare il furbetto, voglio un numero positivo!\n\n";
     else if (p < 2)
     cout << "\nQuesto non e' un numero primo.\n\n";
     else if (p==2 || p==3)
     cout<<"\nQuesto è uno dei più piccoli numeri primi!\n\n";
     else {
     for (int q = 2; q <= p/2; q++)
     if (p%q == 0) {
     cout <<'\n' << p << " = " << q << " * " << p / q << endl;
     divisori++;
     }
     if (divisori > 0)
     cout <<"\nQuesto dimostra che "<< p <<" non e un numero primo.\n\n"; 
     else
     cout <<"\n"<< p <<" e' un numero primo!\n\n";
     }
     return 0;
     }
     
     int main()
     {
     int res;
     char again;
     do
     {
     res = primo();
     if (res) return res;
     cout << "\nPremi c per continuare o qualunque altro tasto per terminare. ";
     cin >> again;
     } 
     while (again == 'c');
     return 0;
     }
    Volevo inoltre sapere se a livello di scrittura va bene o fa schifio Grazie a tutti quanti per l'immensa disponibilità!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Non hai specificato cosa intendi per << perchè è stato scritto così >> cosa?

    Intendi questo?
    if (res) return res;

    Non ha senso infatti, lo avrebbe se la funzione primo() ritornasse vari valori, 0 o un valore
    diverso da 0, che abitualmente identifica errore (0=ok, 1 o >0 = errore o i codici di errrore)

    In qual caso la main uscirebbe con lo stesso codice di errore della funzione primo().
    Ma visto che ritorna sempre 0.... puoi togliere e trasformare la funzione in "void".

    Oppure aggiungi casi in cui primo() ritorna in caso di errore "1", allora la cosa ritorna ad avere
    senso, ma mi sembra che ti stai imbarcando in problematiche di secondo piano per te al momento.

  3. #3
    Quoto c0der e aggiungo che se la funzione int primo() venisse modificata, si otterrebbe il risultato corretto:

    codice:
    if (divisori > 0){
      cout <<"\nQuesto dimostra che "<< p <<" non e un numero primo.\n\n"; 
      return 0;
    }else{
      cout <<"\n"<< p <<" e' un numero primo!\n\n";
      return 1;
    }
    }

  4. #4
    In realtà volevo sapere perché le righe che ho scritto all'inizio (ossia quelle che dichiaro "facenti parti del codice" inserito dopo) fossero state scritte in quel modo.

    il punto è che in tal modo il programma non va in loop infinito, e posso premere un tasto per uscire o qualunque altro per continuare, e non mi dà alcun tipo di errore.

    La parte a cui mi riferivo è comunque

    codice:
     int main()
     {
     int res;
     char again;
     do
     {
     res = primo();
     if (res) return res;
     cout << "\nPremi c per continuare o qualunque altro tasto per terminare. ";
     cin >> again;
     } 
     while (again == 'c');
     return 0;
     }
    così la metto completa!
    Il programma in questo modo fa quello che ho detto prima..

    da notare che senza questa parte, il programma fa il suo lavoro e poi esce sempre. Era solo per capire perchè e come funzionasse..

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Che vuol dire "non va in loop infinito" ... c'è un while controllato dall'input di tastiera ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Si appunto! Con tale while fa quello che deve fare ossia alla fine mi chiede se voglio continuare o meno. Mi cheidevo solo se così andasse bene o ci fossero errori di qualche genere!

    Più che altro mi serviva l'analisi (= commento) di quella parte scritta separata.. per capire meglio

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Continuo a non capire scusami.
    Ma chi l'ha scritto questo do/while? non l'hai scritto tu?
    Dai tuoi precedenti post avevo capito che lo scrivessi tu il codice che postavi.

    P.S. Visto dopo che ho risposto altro tuo messaggio:
    il concetto è semplice, devi fare un chiamata a funzione ripetitiva e ti metti quindi in un while
    o do/while con dentro una richiesta di input per eventuale uscita dal loop.
    Uscita che puoi fare come hai fatto benissimo oppure con un break.

  8. #8
    Io ho scritto il codice principale, poi siccome non riuscivo a capire come implementare la domanda "vuoi continuare" mi hanno aiutato, ma buttandomi li la parte secondaria.. senza dirmi spiegazioni di alcun genere! Per questo volevo un qualche tipo di descrizione od aiuto..

    Il mio codice era buono, solo che usciva ogni volta che aveva finito di fare il lavoro dichiarato.. e non mi piaceva così..

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ovviamente non devi scrivere

    if (res) return res;

    ma semplicemente

    printf("Risultato %d\n", res);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    La parte a cui mi riferivo è comunque
    ...
    Generalmente le situazioni sono 2: qualcuno non sa come scrivere un codice e chiede aiuto o qualcuno deve capire un codice corretto.
    Nel tuo caso, hai postato un codice pieno di errori che non hai nemmeno scritto tu quindi bisognerebbe prima correggerlo e poi spiegarti cosa fa. Ma la correzione dipende dalla semantica che ti interessa.

    Per evitare di prolungare questo post all'infinito, ti suggerisco di spiegarci cosa vuoi fare così possiamo aiutarti a formulare un codice adeguato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.