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

Discussion in 'Computer & Technology' started by gallo92, Mar 23, 2011.

  1. gallo92

    gallo92 Tribe Member

    Joined:
    Jul 31, 2008
    Messages:
    8,888
    Likes Received:
    850
    Trophy Points:
    478
    Location:
    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.
    Code:
    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

    Joined:
    Nov 5, 2006
    Messages:
    29,322
    Likes Received:
    4,302
    Trophy Points:
    4,838
    Location:
    L'isola maledetta di Lodoss
    NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO


    ma se vuoi autoimpararlo perchè quella porcata di Pascal

    ;_;
  3. Elbender93

    Elbender93 Tribe Member

    Joined:
    May 26, 2008
    Messages:
    8,189
    Likes Received:
    403
    Trophy Points:
    132
    Location:
    Shinsekai
    mi vedo costretto a quotare :asd:
  4. glenkocco

    glenkocco Il Newey del Tribe

    Joined:
    Feb 21, 2008
    Messages:
    34,228
    Likes Received:
    14,677
    Trophy Points:
    9,637
    Location:
    Where Time Becomes a Loop
    PSN Tag:
    fenris07-
    anche io.. che brutti ricordi con pascal:asd:
  5. apb

    apb Tribe Newbie

    Joined:
    Jan 29, 2009
    Messages:
    669
    Likes Received:
    1
    Trophy Points:
    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?
    Last edited: Mar 23, 2011
  6. gallo92

    gallo92 Tribe Member

    Joined:
    Jul 31, 2008
    Messages:
    8,888
    Likes Received:
    850
    Trophy Points:
    478
    Location:
    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

    Joined:
    Nov 5, 2006
    Messages:
    29,322
    Likes Received:
    4,302
    Trophy Points:
    4,838
    Location:
    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

    Joined:
    Jul 31, 2008
    Messages:
    8,888
    Likes Received:
    850
    Trophy Points:
    478
    Location:
    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

    Joined:
    Nov 5, 2006
    Messages:
    29,322
    Likes Received:
    4,302
    Trophy Points:
    4,838
    Location:
    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

    Joined:
    Apr 13, 2007
    Messages:
    721
    Likes Received:
    0
    Trophy Points:
    16
    io faccio informatica e ti consiglio C -> C++ -> Java
  11. Evil_Sephiroth

    Evil_Sephiroth Tribe Active Member

    Joined:
    Nov 5, 2006
    Messages:
    29,322
    Likes Received:
    4,302
    Trophy Points:
    4,838
    Location:
    L'isola maledetta di Lodoss
    Anche Visual basic potrebbe andare.
  12. kinn

    kinn Tribe Member

    Joined:
    Jan 2, 2008
    Messages:
    4,311
    Likes Received:
    17
    Trophy Points:
    36
    Location:
    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

    Joined:
    Jan 18, 2007
    Messages:
    4,828
    Likes Received:
    45
    Trophy Points:
    192
    Location:
    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

    Joined:
    Jan 2, 2008
    Messages:
    4,311
    Likes Received:
    17
    Trophy Points:
    36
    Location:
    Salerno
    che io ricordi finora mi hanno parlato solo di C, C++, Java e Assembly
  15. glenkocco

    glenkocco Il Newey del Tribe

    Joined:
    Feb 21, 2008
    Messages:
    34,228
    Likes Received:
    14,677
    Trophy Points:
    9,637
    Location:
    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

    Joined:
    Jul 31, 2008
    Messages:
    8,888
    Likes Received:
    850
    Trophy Points:
    478
    Location:
    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

    Joined:
    Jul 26, 2009
    Messages:
    8,391
    Likes Received:
    1,392
    Trophy Points:
    533
    Location:
    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)

    Joined:
    Jun 2, 2008
    Messages:
    4,514
    Likes Received:
    250
    Trophy Points:
    242
    Location:
    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.
    Last edited: Mar 28, 2011
  19. kinn

    kinn Tribe Member

    Joined:
    Jan 2, 2008
    Messages:
    4,311
    Likes Received:
    17
    Trophy Points:
    36
    Location:
    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.
    Last edited: Mar 28, 2011
  20. Lollo96

    Lollo96 Nuovo segretario PDL (Partito di Lollo)

    Joined:
    Jun 2, 2008
    Messages:
    4,514
    Likes Received:
    250
    Trophy Points:
    242
    Location:
    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?
    Last edited: Mar 29, 2011