esercizio

Topic sul pascal.

esercizio

Postby hiras on Wed Nov 29, 2006 7:29 pm

ciao S3raph sono nuovo e sono autodidatta nell'arte della programmazione. ho postato l'esercizio con relativo codice. diciamo che va però secondo me potrebbero essere applicate delle migliorie. tu che sei il guru del pascal cosa ne pensi e ovviamente cosa corregeresti.
grazie.

dati il nome e la statura di Npersone, scegliere e stampare il nome di quelle che sono alte più di 180cm. contarle e alla fine comunicare il numero delle persone scelte
Code: Select all
program statura;

var a,b,i,x,tot:integer;
    nome,d:string;

    procedure dati;
    begin
         writeln;
         writeln('quante sono le persone da inserire?'); {numeri dati in input}
         readln(a);
    end;

    procedure altezza;
    begin
         for i:=1 to a do
             begin
                  b:=b+1;
                  writeln('inserisci il nome');
                  readln(nome);
                  writeln('inserisci la statura');
                  readln(x); {valore temporaneo acquisito}

                  if (x>180) then {calcola quante persone sono pi— alte di 180cm}
                  tot:=tot+1;

                  case x of {mi dice i nomi delle persone pi— alte di 180cm}
                  000..180:writeln('',nome,' e'' meno alto/a di 180 cm');
                  181..250:writeln('',nome,' e'' piu'' alto/a di 180 cm');
                  end;
              writeln;
              end;
         writeln('il totale delle persone alte piu'' di 180 cm sono ',tot);
         readln;
    end;

begin
     dati;
     altezza;
end.
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

esercizio

Sponsor

Sponsor


Postby Fabriz on Thu Nov 30, 2006 5:31 pm

Ma che guru e guru :?


1. Se disgraziatamente ho subito modifiche transegeniche e sono più alto di 250 cm? Crasha :X Leva e il case of e mettici un if del tipo:
Code: Select all
if altezza>180 then
                            begin
                                    scrivi pippo1
                                    tot:=tot+1 cosi levi l'if dopo
                            end;
                     else scrivi pippo2


2. a cosa serve il b:=b+1 e la d nelle string che non usi? :S


Per il resto, good job :D
Bit wrote:Ma sisi cosa? che ca**o c'è da ridere? bha


Dead on my sweet Piano.


IO NON SONO AMICO DI GOOGLE
User avatar
Fabriz
Diagramma a Blocchi
 
Posts: 209
Joined: Sun Jul 02, 2006 4:15 pm

Postby hiras on Thu Nov 30, 2006 7:18 pm

S3raph wrote:Ma che guru e guru :?

2. a cosa serve il b:=b+1 e la d nelle string che non usi? :S



S3raph con il guru non intendevo offenderti, anzi.....

2. b:=b+1 e la d nelle string erano sicuramente altre prove che stavo facendo e nalle fretta ho dimenticato di toglierle.

comunque la tua soluzione era proprio quella che cercavo. infatti non volevo mettere il case però non ci riuscivo in nessuna maniera cosi come alternativa l'ho utilizzato.

grazie.
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby hiras on Thu Nov 30, 2006 7:21 pm

scusa mi sono dimenticato. siccome non ho nessun testo da cui studiare ma solo delle guide non è che potresti postare degli esercizi in modo che mi possa esercitare?

ti premetto che sono arrivato solo ai cicli di iterazione....

grazie mille ;)
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby Fabriz on Thu Nov 30, 2006 11:51 pm

Certamente!


Rispondimi a queste domande, così posso avere un quadro della tua preparazione:

Sai usare BENE i vettori?E le matrici? Come te la cavi con repeat,while e for? Sai usare bene stringhe? Conosci le procedure e le funzioni dedicate ad essa? Quanti anni hai (mi serve per sapere quanto sei preparato in logica e matematica)?


Grazie.

Ah, magari se mi dicessi gli argomenti(For to do,vettori, gestione dei file, matrici e calcoli ....) mi sarebbe più facile capire le tue esigenze.

Buon lavoro!

PS:

hiras wrote:S3raph con il guru non intendevo offenderti, anzi.....


non ti preoccupare assolutamente! scusami te se sono sembrato scontroso piuttosto..

PS2:il tuo avatar mi ricorda un non so che di...sardo! sbaglio?
Bit wrote:Ma sisi cosa? che ca**o c'è da ridere? bha


Dead on my sweet Piano.


IO NON SONO AMICO DI GOOGLE
User avatar
Fabriz
Diagramma a Blocchi
 
Posts: 209
Joined: Sun Jul 02, 2006 4:15 pm

Postby hiras on Fri Dec 01, 2006 12:22 am

S3raph wrote:Certamente!

Rispondimi a queste domande, così posso avere un quadro della tua preparazione:

Sai usare BENE i vettori?E le matrici? Come te la cavi con repeat,while e for? Sai usare bene stringhe? Conosci le procedure e le funzioni dedicate ad essa? Quanti anni hai (mi serve per sapere quanto sei preparato in logica e matematica)?


Grazie.

Ah, magari se mi dicessi gli argomenti(For to do,vettori, gestione dei file, matrici e calcoli ....) mi sarebbe più facile capire le tue esigenze.



ciao S3raph. sono contento del tuo interessamento. :D
veniamo al sodo: sono un novellino in materia e sono autodidatta quindi potrai capire le difficoltà che posso e potrò incontrare lungo il percorso.

per adesso mi sto cimentando unicamente coi cicli di iterazione, in quanto di tutto il resto, cioè matrici vettori e via dicendo non so proprio niente. sto andando avanti passo passo cercando di sopperire alle lacune leggendo svariate guide sparse nella rete.

ho 37 anni (ma spirito da ventenne), lavoro da più di venti e ho famiglia, quindi il tempo da dedicare a questa "bellissima" attività non è quello che vorrei. (ho una figlia di 2 anni)

però a mio favore posso dirti che sono un fresco diplomato (2005) e con il massimo dei voti, quindi la voglia di studiare c'è e non mi spaventano le difficoltà.

quindi vedi tu se te la senti di seguirmi e darmi consigli te ne saro grato se no non ti preoccupare, amici come prima.

comunque domani ti posterò alcuni esercizi che ho fatto cosi potrai realmente renderti conto delle mie attuali capacità. adesso non ho i sorgenti in quanto sono in un altro pc.

grazie ;)

ps eh si dal mio avatar si vede che sono di milano :lol:
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby hiras on Fri Dec 01, 2006 12:31 am

ah volevo aggiungere che ho cominciato con il tp in quanto mi è sembrato il più abbordabile x le mie esigenze attuali, in quanto penso che per correre bisogna prima imparare a mettersi in piedi, poi camminare ed infine una volta acquistata la sicurezza dei tuoi mezzi provare a correre.

ciao ;)
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby hiras on Fri Dec 01, 2006 9:21 am

ciao come promesso ti posto gli esercizi che ho svolto, in quanto non ho visto la possibilità di allegare nessun file. come potrai notare ho usato solo il ciclo for e le procedure parametriche, ma solo esclusivamente per potermi esercitare e assimilare questi concetti. tra questi troverai anche quello relativo alla statura che mi hai corretto. è ok grazie.

adesso vedi tu

1. Scrivere i primi 10 numeri interi successivi a un numero N fornito da tastiera.
Code: Select all
program muneri_interi;

var a,i:integer;

    begin
         writeln('inserisci un numero');
         readln(a);

               for i:=1 to 10 do
                   begin
                   a:=a+1;
                       write(' ',a);
         readln;
         end;
         end.

2. Da tastiera si introduce un elenco di N persone (N dato in input). Di ciascuna persona vengono forniti il nome e l'anno di nascita. Calcolare l'età media.
Code: Select all
program etamedia;

var  npersone,anno,a,i,x,tot:integer;
     b:real;
     nome:string;

    begin
         writeln('questo programma calcola l''eta'' media');
         writeln; {comando che mi permette di andare a capo di una riga lasciandola in bianco}
         writeln('quante sono le persone nell''elenco?');
         readln(npersone); {numero dati da acquisire}

         a:=0;
         tot:=0;
         x:=0; {valore temporaneo acquisito}

         for i:=1 to npersone do
         begin
            a:=a+1;
            writeln('inserisci il nome della persona');
            readln(nome);
writeln('inserisci la data di nascita');
            readln(x);
            tot:=tot+x;
            end;
            b:=((2006*npersone)-tot) / npersone;
            writeln('l''eta'' media e''',b:3:2);
         readln;
end.

3. Dato un elenco di N numeri, si devono scegliere quelli che sono maggiori di 10 e minori di 100. Contare tali numeri e scrivere la loro somma.
Code: Select all
program somma_numeri_maggiori_minori;

var a,b,i,x,somma,tot:integer;

    procedure dati;
    begin
         writeln('somma di numeri dati in input compresi tra 10 e 100');
         writeln;
         writeln('quanti sono i numeri da inserire?'); {numeri dati in input}
         readln(a);
         end;

         procedure calcolo;
         begin

              for i:=1 to a do
                  begin
                  b:=b+1;
                  writeln('inserisci il numero');
                  readln(x); {valore temporaneo acquisito}

                    if (x>10) and (x<100) then {calcola quanti numeri sono compresi tra 10 e 100}
                    tot:=tot+1;
                    if (x>10) and (x<100) then {calcola la loro somma}
                    somma:=somma+x;
                    end;

                    writeln;
                    writeln('i numeri > di 10 e < di 100 sono ',tot);
                    writeln;
                    writeln('loro somma e'' ', somma);
                    readln
                    end;
begin
dati;
calcolo;
end.


4. Dati il nome e la statura di N persone, scegliere e stampare il nome delle persone che sono alte + di 180cm. Contarle e alla fine comunicare il numero delle persone scelte.
Code: Select all
program statura;

var a,b,i,x,tot,misura:integer;
    nome,d:string;

    procedure dati;
    begin
         writeln;
         writeln('quante sono le persone da inserire?'); {numeri dati in input}
         readln(a);
    end;

    procedure altezza;
    begin
         for i:=1 to a do
             begin
                  b:=b+1;
                  writeln('inserisci il nome');
                  readln(nome);
                  writeln('inserisci la statura');
                  readln(x); {valore temporaneo acquisito}

                  if x>180 then {calcola quante persone sono più alte di 180cm}
                  begin
                       writeln('',nome,' e'' piu'' alto/a di 180 cm');
                       tot:=tot+1;
                       end
                  else
                  writeln('',nome,' e'' meno alto/a di 180 cm');
              writeln;
              end;
         writeln('il totale delle persone alte piu'' di 180 cm sono ',tot);
         readln;
    end;

begin
     dati;
     altezza;
end.

5. Un giro turistico è fatto di N tappe, delle quali si introducono da tastiera il nome della città di arrivo e i km percorsi. Calcolare il percorso totale e il percorso medio delle tappe.
Code: Select all
program tour;

var partenza,arrivo:string;
    a,c,i,km,tappe,tot:integer;
    media:real;
    procedure dati;
    begin
         writeln;
         writeln('programma che calcola il totale e il percorso medio del tour');
         writeln;
         writeln('quante sono le tappe del tour?');
         writeln;
         readln(tappe);
         writeln('qual''e'' la citta'' di partenza?');
         readln(partenza);
         writeln;
    end;

    procedure totale;
    begin
         for i:=1 to tappe do
         begin
              a:=a+1;
              writeln('qual''e'' la ',a,'ø tappa?');
              readln(arrivo);
              writeln('quanti sono i km da percorrere?');
              readln(km);
              tot:=tot+km;
         end;
   
         writeln('i km percorsi sono ',tot);
         readln;
         writeln;
         media:=tot / tappe;
         writeln(' il percorso medio delle tappe e'' ',media:3:2,' km');
         readln;
    end;

begin
     dati;
     totale;
end.
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby Fabriz on Fri Dec 01, 2006 4:46 pm

il for lo sai usare bene :D

Veniamo a qualcosaltro...uhm...(devo far lavorare la creatività!)

Chiedere all'utente di inserire un numero fino a che non introduce un numero negativo, nel qual caso comunica che il numero è negativo e chiede all'utente se voler ripetere il processo oppure no. [da fare con repeat]

Dato in ingresso un numero calcolarne il fattoriale( sono sicuro tu sappia cosa voglia dire, ma comunque il fattoriale di un numero n è n*(n-1)(n-2)...1.
[da fare con il while].


Ti consiglio prima di fare lo 'struttogramma' ovvero buttare giù l'algoritmo che risolve i programmi, poi tradurlo in pascal.

Buon lavoro!


Ps:non esitare a chiedere!
Bit wrote:Ma sisi cosa? che ca**o c'è da ridere? bha


Dead on my sweet Piano.


IO NON SONO AMICO DI GOOGLE
User avatar
Fabriz
Diagramma a Blocchi
 
Posts: 209
Joined: Sun Jul 02, 2006 4:15 pm

Postby hiras on Fri Dec 01, 2006 11:34 pm

ciao grazie per aver messo ordine nel mio post, adesso è comprensibile.

riguardo gli esercizi mi servirebbe per adesso sapere come dire al progr. che il numero è negativo. non mi è mai capitato di leggerlo in alcuna guida ne tantomeno negli esempi. :?

ciao :lol:
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby Fabriz on Sat Dec 02, 2006 9:21 pm

hiras wrote:ciao grazie per aver messo ordine nel mio post, adesso è comprensibile.

riguardo gli esercizi mi servirebbe per adesso sapere come dire al progr. che il numero è negativo. non mi è mai capitato di leggerlo in alcuna guida ne tantomeno negli esempi. :?

ciao :lol:


non mi pare di aver ordinato nulla :shock:


Boh!

Comunque basta un controllo semplicisso tramite l'if in generale

Code: Select all
if a<0 then writeln...
         else writeln....


MA!

Siccome in questo caso il controllo va nel repeat devi fare una roba tipo
Code: Select all
repeat
         ....
until ....


ricordati come funziona il repeat...
Bit wrote:Ma sisi cosa? che ca**o c'è da ridere? bha


Dead on my sweet Piano.


IO NON SONO AMICO DI GOOGLE
User avatar
Fabriz
Diagramma a Blocchi
 
Posts: 209
Joined: Sun Jul 02, 2006 4:15 pm

Postby k8 on Sat Dec 02, 2006 10:23 pm

S3raph wrote:
hiras wrote:ciao grazie per aver messo ordine nel mio post, adesso è comprensibile.

riguardo gli esercizi mi servirebbe per adesso sapere come dire al progr. che il numero è negativo. non mi è mai capitato di leggerlo in alcuna guida ne tantomeno negli esempi. :?

ciao :lol:


non mi pare di aver ordinato nulla :shock:

:lol:
sono stato io ad ordinare, per comodità usa il tag
Code: Select all
[code]codice sorgente ... [/code]

ciao ;)
Big-Bug cerca collaboratori.
Scrivete senza abbreviazioni e senza k, grazie.
k8
Admin
 
Posts: 2127
Joined: Tue Jun 06, 2006 4:00 pm

Postby hiras on Sat Dec 02, 2006 11:32 pm

Mr.Keith :oops: thanks per averlo ordinato, :D purtroppo io non ho potuto fare di meglio in quanto ho problemi durante la connessione (uso il cell, ma più avanti, se si decidono, avrò la rete fissa). :?

S3raph suggerimento raccolto adesso (domani) provo. ti farò sapere. ciao :P
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby hiras on Mon Dec 04, 2006 4:40 pm

Ciao S3raph nei ritagli di tempo sono riuscito a buttare giù qualcosa. Questo è il programma.
Code: Select all
program numneg;

uses crt;

var a:real;
    ris:char;

begin
  clrscr;
   repeat
    writeln('inserisci un numero');
    readln(a);
     if a<0 then
     begin
       writeln('il numero e'' negativo. vuoi ripetere il processo?');
       writeln;
       writeln('premi s o n');
       readln(ris);
       if ris='s' then
       writeln('ricomincia');
       writeln;
     end;
  until
    (ris='n');
   
    write('premi un tasto per concludere ciao');
    readln
end.


Come potrai notare se do il comando ‘s’ o ‘n’ il progr ricomincia il ciclo o lo finisce.
C’è però un problema che non sono riuscito a risolvere cioè se premo qualunque tasto al di fuori di ‘s’ il programma ricomincia lo stesso il ciclo e non ho capito perché. :shock: :?

Quindi ti chiedo cortesemente, tramite i tuoi consigli di farmi arrivare alla soluzione, senza però dirmela in quanto altrimenti sarebbe troppo facile.
Grazie ciao :lol:
User avatar
hiras
Newbies
 
Posts: 49
Joined: Mon Nov 27, 2006 9:48 am
Location: ichnusa

Postby Fabriz on Mon Dec 04, 2006 5:43 pm

allora, il ciclo smette quando dentro ris c'è n. Pensa un attimo al buffer della tastiera. Uno preme s e il ciclo si ripete perchè giustamente in ris c'è s. Metti che premo p. L'if non fa comunicare nulla, ma dentro ris non c'è n, quindi...
Bit wrote:Ma sisi cosa? che ca**o c'è da ridere? bha


Dead on my sweet Piano.


IO NON SONO AMICO DI GOOGLE
User avatar
Fabriz
Diagramma a Blocchi
 
Posts: 209
Joined: Sun Jul 02, 2006 4:15 pm

Next

Return to Pascal

Who is online

Users browsing this forum: No registered users and 1 guest

cron