1. BENVENUTO SU CONSOLE TRIBE

    Benvenuto, stai navigando nella nostra community come ospite

    Avere un account su Console Tribe ti permetterà di creare e partecipare alle discussioni e al mercatino, organizzare tornei e partite online, iniziare conversazioni personali con gli altri giocatori del forum e di utilizzare tutte le funzioni di questo sito.

    Registra il tuo account in meno di 5 secondi, se vuoi puoi sfruttare i login social via Facebook, Google Plus o Twitter.

Pascal - Il mio primo programma

Discussione in 'Computer & Technology' iniziata da gallo92, 23 Marzo 2011.

  1. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    hai dimenticato di dichiarare le variabili oltre alla a :D

    Comunque per avere dei float ti basta semplicemente dichiararli come tali :)

    Esempio: "int a,b,c,d; diventa float a,b,c,d;

    Poi devi ricordarti che stai trattando variabili non intere ma float e quindi nelle scanf al posto di %d devi usare %f :)

    Altro consiglio:

    ESEMPIO:

    scanf("%d",&b);

    scanf("%d",&c);

    puoi scriverlo anche come:

    scanf("%d%d",&b,&c);

    è la stessa cosa ma è più compatto :)

    Infine (ma col tempo ti verrà naturale)... del calcolo della variabile d puoi anche fare a meno ;)
    Puoi eseguire il calcolo e stampare con la printf contemporaneamente facendo cosi :)

    ESEMPIO:

    printf("Il risultato e' %d",b+c);

    dove b+c rappresenta proprio la tua d. Ti renderai conto che alla fine del programma avrai risparmiato la scrittura di qualche istruzione e la dichiarazione di una variabile :) Comunque questo è già più "raffinata" come cosa.. per ora puoi benissimo usare millemila variabili per "capirti meglio" quando scrivi il codice.

    P.S: per quanto riguarda il system("pause"); si tratta di una funzione del C contenuta in stdlib.h che magicamente fa uscire la scritta a video "Premere un tasto per continuare..." tutto qui :) puoi benissimo continuare a usare il getc.
    L'inconveniente sta nel fatto che non tutti i compilatori si comportano allo stesso modo, alcuni ignorano un primo getc(in quel caso ne metti due e vai lo stesso) e all'apparenza a te sembra non funzionare :)
    Stai usando DEV C?
    Ultima modifica: 29 Marzo 2011
  2. Lollo96

    Lollo96 Nuovo segretario PDL (Partito di Lollo)

    Registrato:
    2 Giugno 2008
    Messaggi:
    4.514
    "Mi Piace" ricevuti:
    250
    Punteggio:
    242
    Località:
    Somewhere in time
    Dev c++.E' molto comodo e poi lo usai quando, due anni orsono, mi ero approcciato alla programmazione con scarsi risultati (le mie basi matematiche erano pessime dato che facevo la seconda media).Cmq per il fatto della variabile dimenticata ho copiato male, visto che avevo compilato tranquillamente.

    il %f lo devo usare anche nei printf?
    Ultima modifica: 29 Marzo 2011
  3. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    sisi certo! altrimenti dovrebbe darti errore.... per logica, lui con %d si aspetta un intero, mentre tu gli passi un float :)

    per completezza di fornisco anche gli altri:

    %d - int
    %ld - long int
    %f - float
    %lf - double
    %s - stringhe
    %c - char
  4. Lollo96

    Lollo96 Nuovo segretario PDL (Partito di Lollo)

    Registrato:
    2 Giugno 2008
    Messaggi:
    4.514
    "Mi Piace" ricevuti:
    250
    Punteggio:
    242
    Località:
    Somewhere in time
    grazie mille!
    Però ho modificato il codice con i float e mi escono tutti numeri sballati :???:

    EDIT: ho il computer scemo_Ora è tutto a posto :asd:
    Ma la funzione sqrt sta in math.h, no?
    Ultima modifica: 29 Marzo 2011
  5. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    cosa non andava ? :)

    ricorda che con float anche gli interi vengono trattati come float appunto :)

    quindi 1 diventa 1.000 e cosi via :)
  6. Lollo96

    Lollo96 Nuovo segretario PDL (Partito di Lollo)

    Registrato:
    2 Giugno 2008
    Messaggi:
    4.514
    "Mi Piace" ricevuti:
    250
    Punteggio:
    242
    Località:
    Somewhere in time
    Forse non aveva compilato è mi restituiva numeri assurdi.
    Una cosa, ora con il programma posso svolgere solo un'operazione, qual è il comando che rimandi all'inizione del programma così da poter fare più operazioni?
  7. nick95

    nick95 Tribe Member

    Registrato:
    2 Luglio 2008
    Messaggi:
    296
    "Mi Piace" ricevuti:
    5
    Punteggio:
    16
    Località:
    su internet
    usa cocoa :asd:
  8. DJ_Jedi

    DJ_Jedi Infrangitore di Sogni - Anti Spam Task Force

    Registrato:
    23 Gennaio 2007
    Messaggi:
    17.008
    "Mi Piace" ricevuti:
    3.567
    Punteggio:
    1.627
    La cosa più semplice è mettere all'inizio un if che controlla la risposta dell'utente, ovvero fai una cosa del tipo: "Hai altre operazioni da fare? S/N" se l'utente inserisce S si ritorna all'inizio, se invece mette N esce, ovviamente questa domanda la devi inserire solo se un counter definito per questo è maggiore di 0.
    Non ti posso scrivere il codice perchè io programmo in Java e ti sarebbe inutile, probabilmente qui qualcuno ti saprà aiutare meglio.
  9. Lollo96

    Lollo96 Nuovo segretario PDL (Partito di Lollo)

    Registrato:
    2 Giugno 2008
    Messaggi:
    4.514
    "Mi Piace" ricevuti:
    250
    Punteggio:
    242
    Località:
    Somewhere in time
    si in effetti avevo pensato anche io ad una cosa del genere, però non conosco il comando adatto. Anche se non so cosa sono i counter, avevo pensato di mettere direttamente 0 o 1.
    una cosa del genere:

    Int r;
    printf("Vuoi fare altre operazioni 1=Si, 0=No);
    scanf("%d",&r);
    if(r == 1)
    {
    Comando sconosciuto;
    }
    if else(r == 0)

    getch();

    La struttura mi pare corretta.
  10. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    io ho usato il do-while.
    Ti faccio vedere:
    int main(void)
    {
    int a,b,c;

    do{
    printf("Scegliere il numero in base all'operazione che si vuole svolgere:\n0 Se vuoi svolgere un'addizione.\n1 Per una sottrazione.\n2 Per una moltiplicazione.\n3 Per una divisione.\n4 per uscire\n");
    scanf("%d",&a);

    if(a == 0){
    printf("Scrivi i due numeri da sommare: ");
    scanf("%d%d",&b,&c);
    printf("Il risultato e' %d",b+c);}

    else if(a == 1){
    printf("Scrivi i due numeri da sottrarre: ");
    scanf("%d",&b,c);
    printf("Il risultato e' %d",b-c);}

    else if(a == 2){
    printf("Scrivi i due numeri da moltiplicare: ");
    scanf("%d",&b,&c);
    printf("Il risultato e' %d",b*c);}

    else if(a == 3){
    printf("Scrivi i due numeri da dividere: ");
    scanf("%d",&b,&c);
    printf("Il risultato e' %d\n",b/c);}
    }
    while(a!=4);

    system("PAUSE");}
    Il do-while opera un istruzione ogni volta che la condizione contenuta nel while risulta vera :) quindi ogni volta che "a" è diverso da 4 lui ti fa ripetere le operazioni. Quando premi 4 esce dal programma e termina :)

    Provalo ;) ora te lo rifaccio con lo switch e ti faccio vedere la grande differenza.

    EDIT:

    int main(void){
    int a,b,c;

    do{
    printf("Scegliere il numero in base all'operazione che si vuole svolgere:\n0 Se vuoi svolgere un'addizione.\n1 Per una sottrazione.\n2 Per una moltiplicazione.\n3 Per una divisione.\n4 per uscire\n");
    scanf("%d",&a);

    printf("Scrivi i due numeri da sommare: ");
    scanf("%d%d",&b,&c);

    switch (a){

    case 1:
    printf("Il risultato e' %d\n",b+c);
    break;
    case 2:
    printf("Il risultato e' %d\n",b-c);
    break;
    case 3:
    printf("Il risultato e' %d\n",b*c);
    break;
    case 4:
    printf("Il risultato e' %d\n",b/c);
    break;}


    }
    while(a!=4);

    system("PAUSE");
    }

    Di sicuro ti accorgerai del fatto che risulta essere molto più pulito e leggero :)
    Ultima modifica: 29 Marzo 2011
  11. Lollo96

    Lollo96 Nuovo segretario PDL (Partito di Lollo)

    Registrato:
    2 Giugno 2008
    Messaggi:
    4.514
    "Mi Piace" ricevuti:
    250
    Punteggio:
    242
    Località:
    Somewhere in time
    uhm cerco di capire.
    in pratica la struttura è così:
    ...
    scrivi il valore della variabile con la scanf

    switch(nome della variabile)

    case e il valore della variabile
    {
    istruzione
    }
    ...

    giusto?


    il fatto del do-while, non l'ho capito.Poi lo approfondisco su html.it.

    ah, con il secondo codice sorge però un problema. Qualunque operazione tu scelga di fare esce sempre "scrivi i due numeri da sommare".
    Ultima modifica: 29 Marzo 2011
  12. dadino79

    dadino79 Tribe Member

    Registrato:
    3 Giugno 2003
    Messaggi:
    1.264
    "Mi Piace" ricevuti:
    13
    Punteggio:
    36
    Località:
    Roma
    Quanti ricordi..al licevo avevo 9...il pascal era il mio forte ma sono passati troppi anni:asd:

    Cmq..da programmatore di professione...ti consiglio di concentrarti sul C/C++ (la base) e poi studiarti java con cui oggi fai di tutto!!

    ;)
  13. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    Allora.. lo switch si usa quando dobbiamo utilizzare diversi if a cascata, come nel nostro caso. E' più veloce e più potente.

    La sua struttura è:

    SWITCH (exp-costante){
    case x:
    istruzione;
    break;
    case y:
    istruzione;
    break;
    .
    .
    .
    .
    }

    Il case sta a rappresentare il valore assunto dalla variabile. In pratica la funzione che fa? Prende la variabile e il suo valore e va a vedere se c'è un case con quel valore, se lo trova, allora esegue TUTTE le istruzioni sotto il case (anche quelle degli altri case!!!) a meno che dopo l'istruzione non inserisci il "break" che in pratica interrompe l'esecuzione ed esce dallo switch. Nel nostro caso è necessario eseguire solo un operazione per volta, infatti come puoi vedere ho inserito i break dopo OGNI istruzione, per far si che non esegua anche le altre.
    Di fatto è assolutamente uguale al programma che hai fatto tu con gli if. Fa le stesse identiche cose.

    Il do-while è un ciclo iterativo. Esegue una prima volta le istruzioni che seguono il DO. Poi.. se la condizione che poniamo in while() è vera, allora ripete le istruzioni precedenti, altrimenti esce fuori e continua con il programma. E' una sorta di ripetitore automatico con una condizione.
    Io ho messo la condizione a!=4.
    Significa che finchè la variabile "a" avrà un valore diverso da 4, allora il programma ripeterà SEMPRE quello che è scritto dopo il DO, quando poi darai ad "a" il valore 4, che io ho preso come "uscita", allora il programma smette di ripetere e va avanti normalmente. E' più chiaro ora?

    DO{
    istruzione1
    istruzione2
    istruzione3}
    WHILE(exp);
    Ultima modifica: 29 Marzo 2011
  14. audace

    audace Tribe Member

    Registrato:
    18 Gennaio 2007
    Messaggi:
    4.828
    "Mi Piace" ricevuti:
    45
    Punteggio:
    192
    Località:
    Milano
    Se volete vi do le slide del mio prof di informatica :asd:
  15. gallo92

    gallo92 Tribe Member

    Registrato:
    31 Luglio 2008
    Messaggi:
    8.888
    "Mi Piace" ricevuti:
    850
    Punteggio:
    478
    Località:
    where the streets have no name
    ciao kinn, in pratica per fare questo programmino hai usato lo stesso ciclo che ho fatto io per fare quello con Pascal. ti volevo chiedere (in C) se esiste un modo per far comparire dopo ogni operazione solo l'intestazione con i comandi, senza far rimanere tutte le altre scritte.
  16. DJ_Jedi

    DJ_Jedi Infrangitore di Sogni - Anti Spam Task Force

    Registrato:
    23 Gennaio 2007
    Messaggi:
    17.008
    "Mi Piace" ricevuti:
    3.567
    Punteggio:
    1.627
    Anche io avevo pensato di suggerirgli il do-while o lo switch, ma se è alle prime armi sicuramente gli risulterà più facile con un semplice if/else.
    Una cosa che io ho trovato utile mentre stadiavo per Informatica 1 era riprendere i programmi che avevo già fatto e modificarli rendendoli più efficienti man mano che apprendevo i metodi migliori, credo che sia una buona cosa anche per lui.
  17. Apicio

    Apicio Tribe Member

    Registrato:
    12 Agosto 2008
    Messaggi:
    1.727
    "Mi Piace" ricevuti:
    33
    Punteggio:
    132
    Località:
    Sotto una cassa da 1000W
    Devi fare uno switch dentro un do-while.
    main(){
    char operazione, scelta;
    float a,b;

    do{
    printf("Inserisci i due numeri blablabla"
    scanf("%d" blabla)

    printf("Inserisci cosa vuoi fare (+ , - , / , *)\n");
    fflush(stdin); /*svuota il buffer della tastiera per farti inserire un carattere dopo che hai inserito numeri*/
    scanf("%c", &operazione);

    switch(operazione){
    case '+': /*gli apici sono importanti per i caratteri!*/
    printf("La somma è %f\n", a+b);
    break;

    case '\': bla


    bla bla bla blabla

    default: /*caso di default nel caso in cui nessun case corrisponda all'inserimento*/
    printf("Hai inserito un carattere non valido\n");
    }

    printf("Vuoi fare un'altra operazione (s / n )?\n");
    fflush(stdin); /*svuota il buffer della tastiera per farti inserire un carattere dopo che hai inserito numeri*/
    scanf("%c", &scelta);
    }while(scelta=='s'); /*Ripete il ciclo do-while ogni qual volta inserisci il carattere s*/

    system("Pause"); /*Richiama una funzione del Sistema Operativo, per bloccare la shell a video*/
    }
    Ultima modifica: 30 Marzo 2011
  18. DJ_Jedi

    DJ_Jedi Infrangitore di Sogni - Anti Spam Task Force

    Registrato:
    23 Gennaio 2007
    Messaggi:
    17.008
    "Mi Piace" ricevuti:
    3.567
    Punteggio:
    1.627
    Devo proprio impararmi il C++, sto maledetto Java non mi serve a un piffero :asd:
    Che libro mi consigliate? Io per Java mi sono trovato benissimo col Cay Horstmann, c'è qualcosa di simile?
  19. Pikkierello

    Pikkierello Tribe Member

    Registrato:
    27 Settembre 2007
    Messaggi:
    6.232
    "Mi Piace" ricevuti:
    545
    Punteggio:
    343
    Località:
    F**K CENSURA
    non pensavo così tante persone sapessero l'arabo :asd:
  20. Apicio

    Apicio Tribe Member

    Registrato:
    12 Agosto 2008
    Messaggi:
    1.727
    "Mi Piace" ricevuti:
    33
    Punteggio:
    132
    Località:
    Sotto una cassa da 1000W
    Cooooosaaaaa????? Con Java fai anche il caffè!!!

    Comunque il C++ l'ho imparato da Thinking in C++ di Bruce Eckel. E' lo stesso autore di Thinking In java e Thinking in C. E' perfetto secondo me.