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. gallo92

    gallo92 Tribe Member

    Registrato:
    31 Luglio 2008
    Messaggi:
    8.888
    "Mi Piace" ricevuti:
    850
    Punteggio:
    478
    Località:
    where the streets have no name
    come ho scritto circa una settimana fa ho iniziato ad imparare (completamente da autodidatta) un linguaggio di programmazione, per la precisione il Pascal.
    Il motivo del thread è quello di presentarvi il mio primo programma e chiedere consigli ai più esperti, in particolare nel migliorare l'efficienza del programma, perchè mi sembra troppo lungo.

    il programma in questione richiede per ogni tipo di moneta o banconota la quantità posseduta e ne fa una somma totale. si può decidere quali monete inserire e non passarle per forza tutte.
    Codice:
    program calcolo_monete;
    uses crt;
    var
      n, errore:integer;
      prod_mon, qnt_mon:real;
      sino:char;
      val_mon:real;
      enne:string;
    begin
    clrscr;
     writeln('Questo programma calcola la somma totale di ogni tua singola moneta o banconota');
     writeln;
     writeln('Inserisci il relativo numero per quantificare una tua moneta o banconota');
     writeln;
     writeln('MONETE: 2EURO:1 1EURO:2 0.50EURO:3 0.20:4 0.10EURO:5 0.05EURO:6');
     writeln('0.02EURO:7 0.01EURO:8');
     writeln;
     writeln('BANCONOTE: 5EURO:9 10EURO:10 20EURO:11 50EURO:12 100EURO:13 200EURO:14 500EURO:15');
     writeln;
    
     repeat
       qnt_mon:=0;
       val_mon:=0;
       writeln('Inserisci il tipo di moneta o banconota');
       readln(enne);
       val(enne, n, errore);
        if errore <> 0 then
        writeln('ERRORE! Inserire un valore tra quelli espressi in alto nell''indice');
       case n of
       1: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=2;
          prod_mon:= prod_mon+(val_mon*round(qnt_mon));
          end;
       2: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=1;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       3: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=0.5;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       4: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=0.2;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       5: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=0.1;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       6: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=0.05;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       7: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=0.02;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       8: begin
          writeln('Quante monete hai?');
          readln(qnt_mon);
          val_mon:=0.01;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       9: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=5;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
      10: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=10;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
      11: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=20;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
      12: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=50;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
      13: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=100;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
      14: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=200;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
     15: begin
          writeln('Quante banconote hai?');
          readln(qnt_mon);
          val_mon:=500;
          prod_mon:= prod_mon+(val_mon*qnt_mon);
          end;
       end;
    
         writeln('Hai altre monete da dichiarare? (s/n) ');
         readln(sino);
     until sino='n';
    
    writeln('Hai un credito pari a: ', prod_mon:0:2);
    writeln;
    writeln('Premi il tasto INVIO per continuare...');
    readln
    end.
  2. Evil_Sephiroth

    Evil_Sephiroth Tribe Active Member

    Registrato:
    5 Novembre 2006
    Messaggi:
    29.322
    "Mi Piace" ricevuti:
    4.302
    Punteggio:
    4.838
    Località:
    L'isola maledetta di Lodoss
    NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO


    ma se vuoi autoimpararlo perchè quella porcata di Pascal

    ;_;
  3. Elbender93

    Elbender93 Tribe Member

    Registrato:
    26 Maggio 2008
    Messaggi:
    8.189
    "Mi Piace" ricevuti:
    403
    Punteggio:
    132
    Località:
    Shinsekai
    mi vedo costretto a quotare :asd:
  4. glenkocco

    glenkocco Il Newey del Tribe

    Registrato:
    21 Febbraio 2008
    Messaggi:
    34.228
    "Mi Piace" ricevuti:
    14.677
    Punteggio:
    9.637
    Località:
    Where Time Becomes a Loop
    PSN Tag:
    fenris07-
    anche io.. che brutti ricordi con pascal:asd:
  5. apb

    apb Tribe Newbie

    Registrato:
    29 Gennaio 2009
    Messaggi:
    669
    "Mi Piace" ricevuti:
    1
    Punteggio:
    0
    Senti io uso pascal per le olimpiadi di informatica, ma se tu non sei costretto ad utilizzarlo per cause di forza maggiore, non impararlo. Impara un linguaggio OOP, io ho iniziato proprio col C# a programmare.
    Questo tipo di programmazione è più potente di quella procedurale, anche perchè avrai già a disposizione parecchie librerie e il compito sarà parecchio più semplice che dover creare tutto solo.
    Purtroppo anche questo tipo di programmazione non è perfetto. Con l'eccessiva esemplificazione di tutte le operazioni, gli inesperti che si avvicinano per la prima volta al linguaggio si limitano a studiare (almeno nei libri che ho io, il programma di apprendimento è questo) il paradigma OOP e ad utilizzare molto le librerie prestabilite, prestando poca attenzione all'apprednimento di algoritmi che sono importanti per programmare successivamente altri programma senza doversi appoggiare per forza a librerie installate col compilatore o esterne.
    Mi sono accorto di questo quando ho iniziato a studiare degli algoritmi per le olimpiadi: io neanche sapevo che esistevano gli algoritmi.
    Per tutti questi pro e contro sopra elencati, ti dò questo consiglio: se vuoi imparare le cose come si deve, o studi gli algoritmi che si usavano una volta per i linguaggi come il pascal che tu usi, ma li adatti alla OOP, o provi ad apprendere un linguaggio procedurale (il pascal), che sicuramente ti porterà prima o poi a dei problemi che ti costringeranno a memorizzare parecchi algoritmi, e uno ad oggetti.
    Se adotti una di queste due soluzioni impari l'informatica come si deve, senza risultare anacronistico e limitato (sui computer moderni il linguaggio che usi tu, almeno per come lo stò studiando io, ha parecchi limiti).

    apb ha aggiunto 8 Minuti e 16 Secondi più tardi...

    PS:
    Giacchè il titolo è pascal non vado off topic:
    Devo leggere il numero 046, se lo leggo come stringa ottengo una eccezzione (lo leggo da un file, non dalla console), se lo leggo come integer e poi lo passo in stringa con la rocedura STR, diventa 46, ma a me serve proprio 046.
    Suggerimenti?
    Ultima modifica: 23 Marzo 2011
  6. gallo92

    gallo92 Tribe Member

    Registrato:
    31 Luglio 2008
    Messaggi:
    8.888
    "Mi Piace" ricevuti:
    850
    Punteggio:
    478
    Località:
    where the streets have no name
    mal che vada ho perso 5-6 giorni:asd:
    allora da dove dovrei iniziare?
  7. Evil_Sephiroth

    Evil_Sephiroth Tribe Active Member

    Registrato:
    5 Novembre 2006
    Messaggi:
    29.322
    "Mi Piace" ricevuti:
    4.302
    Punteggio:
    4.838
    Località:
    L'isola maledetta di Lodoss
    Secondo me se vuoi imparare un linguaggio per piacere..ma che cmq sia utile..

    Fai C++ o Java

    Poi aspetta altri pareri
  8. gallo92

    gallo92 Tribe Member

    Registrato:
    31 Luglio 2008
    Messaggi:
    8.888
    "Mi Piace" ricevuti:
    850
    Punteggio:
    478
    Località:
    where the streets have no name
    il fatto è che vorrei fare ingegneria informatica, quindi vorrei imparare qualcosa che mi serva anche per l'uni.
  9. Evil_Sephiroth

    Evil_Sephiroth Tribe Active Member

    Registrato:
    5 Novembre 2006
    Messaggi:
    29.322
    "Mi Piace" ricevuti:
    4.302
    Punteggio:
    4.838
    Località:
    L'isola maledetta di Lodoss
    di certo non Pascal allora


    Se non erro a informatica e ingegneria informatica si fanno Java e C++
  10. Mto23

    Mto23 Tribe Member

    Registrato:
    13 Aprile 2007
    Messaggi:
    721
    "Mi Piace" ricevuti:
    0
    Punteggio:
    16
    io faccio informatica e ti consiglio C -> C++ -> Java
  11. Evil_Sephiroth

    Evil_Sephiroth Tribe Active Member

    Registrato:
    5 Novembre 2006
    Messaggi:
    29.322
    "Mi Piace" ricevuti:
    4.302
    Punteggio:
    4.838
    Località:
    L'isola maledetta di Lodoss
    Anche Visual basic potrebbe andare.
  12. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    infatti a ing. informatica pascal non lo vedi proprio :asd:

    anzi ti dirò miei compagni che al liceo hanno studiato pascal hanno bestemmiato in turco nel passaggio a C :asd:
  13. audace

    audace Tribe Member

    Registrato:
    18 Gennaio 2007
    Messaggi:
    4.828
    "Mi Piace" ricevuti:
    45
    Punteggio:
    192
    Località:
    Milano
    Ingegneria informatica al polimi, l'unico corso di informatica del primo semestre riguarda c++

    Comunque complimenti per l'impegno.
  14. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    che io ricordi finora mi hanno parlato solo di C, C++, Java e Assembly
  15. glenkocco

    glenkocco Il Newey del Tribe

    Registrato:
    21 Febbraio 2008
    Messaggi:
    34.228
    "Mi Piace" ricevuti:
    14.677
    Punteggio:
    9.637
    Località:
    Where Time Becomes a Loop
    PSN Tag:
    fenris07-
    come ti è già stato detto, pascal e ingegneria non vanno d'accordo :asd: vai di C/C++ per iniziare, fidati ;)
  16. gallo92

    gallo92 Tribe Member

    Registrato:
    31 Luglio 2008
    Messaggi:
    8.888
    "Mi Piace" ricevuti:
    850
    Punteggio:
    478
    Località:
    where the streets have no name
    allora mi butto sul C, più che altro adesso ho una base piuttosto forte nel Pascal:asd:
  17. FefoShiro

    FefoShiro Tribe Member

    Registrato:
    26 Luglio 2009
    Messaggi:
    8.391
    "Mi Piace" ricevuti:
    1.392
    Punteggio:
    533
    Località:
    Nankang city!
    Azz che incubo Pascal...ai tempi lo feci al primo anno di istituo tecnico...deprimentissimo...:rotfl:
  18. 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
    gatta ci cova.Sto "studiando" il C.Ho fatto questa cazzatella ma segna errore al terzo else e non so il perchè... (anche perchè nel secondo if-else ho usato la stessa "struttura" e non segna niente.)

    #include stdio.h
    #include conio.h
    int a;

    int b;

    int c = 90;

    int d;

    int e;
    int main(void)
    {
    printf("Scrivere l'ampiezza dell'angolo: ");

    scanf("%d",&b);


    if (b>90)
    {
    printf("l'angolo dato e' ottuso");
    }


    else
    {
    printf("l'angolo dato e' acuto");
    }

    a = c-b;

    if(b<90)

    {
    printf("\nIl complementare dell'angolo dato misura %d gradi.", a);
    }

    else
    printf("");

    d = 180-b;


    if(b<180);
    {
    printf("\nIl supplementare dell'angolo dato misura %d gradi.", d);
    }

    else
    printf("");


    e = 360-b;

    printf("\nL'esplementare dell'angolo dato misura %d gradi.", e);
    getch();
    }

    Edit: risolto tutto e mi sono accorto di aver scritto cazzate assurde.
    Ultima modifica: 28 Marzo 2011
  19. kinn

    kinn Tribe Member

    Registrato:
    2 Gennaio 2008
    Messaggi:
    4.311
    "Mi Piace" ricevuti:
    17
    Punteggio:
    36
    Località:
    Salerno
    qualche piccolo consiglio ;):

    - se non hai nessun else da fare, puoi benissimo evitare di scriverlo ;)

    - E se dopo l'if(o l'else etc) hai da scrivere una sola istruzione, allora evita di usare le parentesi graffe. (nel caso specifico conta poco.. ma sono regole di buona programmazione e che tra l'altro fanno risparmiare risorse)

    - Inoltre quando dichiari variabili dello stesso tipo, può essere utile e più rapido dichiararle sulla stessa linea:
    ESEMPIO:

    int a,b,c;

    è equivalente a:
    int a;
    int b;
    int c;

    - In più ti consiglio di abituarti a dichiarare le variabili nel main e non prima, ora non so se sai creare funzioni ma quando lo farai capirai il perchè è meglio dichiarare le variabili nelle funzioni di appartenenza...

    - Impara il costrutto "switch".. può risparmiarti un po di tempo in casi come il tuo. :)

    - Sul get alla fine non mi esprimo... so che molti programmatori lo usano al posto del system("pause")... a detta del mio prof pratica oscena e da bocciatura :asd: ma alla fine è quasi la stessa cosa tanto...

    Per il resto mi congratulo per l'indentatura leggibile, è una qualità apprezzabile.
    Ultima modifica: 28 Marzo 2011
  20. 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
    Sto studiando da due giorni e da autodidatta.Quindi non conosco minimamente la differenza tra il system("pause") e il get.
    L'ho usato solo perché è l'unico comando che conosco per far rimanere a schermo. :asd:
    In ogni caso grazie per le dritte :D
    Per il fatto delle parentesi, lo sapevo.L'avevo fatto solo per memorizzare la struttura.
    Ho fatto una calcolatrice molto (ma molto...) spartana e, tra l'altro scomoda da usare...
    questo è il codice
    #include
    #include


    int main(void)
    {
    int a;

    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.\n");

    scanf("%d",&a);


    if(a == 0)
    {

    printf("Scrivi i due numeri da sommare: ");


    scanf("%d",&b);


    scanf("%d",&c);


    d = b+c;

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

    }

    else if(a == 1)
    {

    printf("Scrivi i due numeri da sottrarre: ");

    scanf("%d",&b);

    scanf("%d",&c);

    d = b-c;

    printf("Il risultato e' %d",d);
    }


    else if(a == 2)
    {


    printf("Scrivi i due numeri da moltiplicare: ");


    scanf("%d",&b);

    scanf("%d",&c);

    d = b*c;

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


    }

    else if(a == 3)
    {

    printf("Scrivi i due numeri da dividere: ");

    scanf("%d",&b);

    scanf("%d",&c);

    d = b/c;

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

    }


    getch();
    }

    se volessi delle variabili float invece di int come dovrei fare?
    Ultima modifica: 29 Marzo 2011