Accedi per seguire   
Seguaci 0
Defected

Algoritmo: Aiuto!

21 messaggi in questa discussione

Oggi è Carnevale, quindi ogni scherzo vale! Ma lo scherzo che ci ha giocato la prof. assegnandoci questo algoritmo, non vale affato! Non hi capito praticamente nulla; eccolo riportato:

Dato un elenco di computer di cui non si conosce a priori il numero, con descrizione, tipo e prezzo i €, visualizzare i dati del computer appartenente a un tipo prefissato e fornito all'inizio da tastiera e alla fine anche il prezzo medio dei computer appartenente al tipo prefissato!

La prof. dice di usare una struttura di ripetizione (Repeat, Until) e all'interno quella del costrutto selezione (If, Then, Else). Quest'ultimo è facile ma il primo io non l'ho mai capito e per questo ho bisogno del vostro aiuto! GRAZIE INFINITE (magari me lo spiegate anche!^^)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ma l'inserimento dei dati lo fai te??

Nello stesso ciclo in cui visualizzi i dati?! :)

Se si allora potrebbe andar bene il repeat until per l'inserimento dei dati.

Quindi:

i=0; // inizializzo la var i.

REPEAT

-inserisci descrizione, computer.desc=(stringa da tastiera);

-inserisci tipo, computer.tipo=(stringa da tastiera);

-inserisci prezzo, computer.prezzo=(numero da tastiera);

-i prende i=i+1; // per conoscere quanto sono in tutto i computer inseriti.

-variabile continua = (numero da tastiera, o 1 o 0) // serve a sapere se vuoi inserire un'altro record nell'array.

UNTIL (continua = 0);

...e quindi quà ti sei popolato l'array composta da i computer.

Un bel ciclo FOR è l'ideale dato che ora sai il numero di iterazioni.

Aquisisci il tipo da tastiera.

somma=0; // inizializzo la var somma

t=0; // inizializzo la var t.

Quindi dato che sai il numero dei computer i e quindi hai l'array computer allora li scorri tutti, fai un ciclo for ( da 0 a i) che contiene:

// INIZIO ciclo

IF (tipo=x) THEN

--- mostra descrizione

--- mostra prezzo

--- somma=somma+prezzo; // una variabile somma che raccoglie tutti i prezzi dei pc di quel tipo

--- t=t+1; // una variabile contatore (che devi prima del ciclo inizializzare a 0) di quanti pc sono di quel tipo

(altrimenti niente, quindi l'else non lo metti).

// FINE del ciclo (non serve aumentare di 1 la variabile i perchè il For fà automaticamente questa operazione, cosa che invece devi fare se usi il ciclo While).

Ora trovi la media così: media=somma/t;

Mostra media;

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Io l'esercizio l'ho capito in maniera diversa.

L'unico dato certo che ho è il tipo di computer e non la quantità di computer presenti nel "database"...

Quello che non mi è chiaro è se l'elenco dei computer è già presente a priori oppure se lo si deve creare manmano...

Versione senza un elenco già confezionato:

- Inizializzo le variabili di supporto

---- azzero l'accumulatore della media

---- azzero il contatore dei computer

- Acquisisco da standard input (tastiera) il tipo di computer da prendere in esame

- Inizio un ciclo che finisce quando come tipo inserisco un carattere (o una stringa o un intero) speciale che mi dichiara che ho finito di inserire dati

---- acquisisco il tipo di computer

---- acquisisco la descrizione del computer

---- acquisisco il prezzo in euro

---- SE (il tipo di computer acquisito = al tipo di computer da prendere in esame) ALLORA

-------- Visualizzo descrizione e prezzo in euro del computer appena acquisito

-------- Aggiungo il prezzo del computer all'accumulatore della media

-------- Incremento il contatore dei computer

- Ricomincio il ciclo

- Ora che sono fuori dal ciclo calcolo la media: accumulatore della media / contatore dei computer

- Visualizzo la media

- FINE

Io propongo un ciclo WHILE al posto del REPEAT che mi permette di avere il controllo di ciò che inserisco in input all'inizio. In questo modo vedo subito se è stato inserito il codice di fine inserimenti. Inoltre il primo inserimento lo farei prima del ciclo in modo che se l'utente inserisce subito il codice d'uscita, il ciclo nemmeno inizia.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Io l'esercizio l'ho capito in maniera diversa.

L'unico dato certo che ho è il tipo di computer e non la quantità di computer presenti nel "database"...

Quello che non mi è chiaro è se l'elenco dei computer è già presente a priori oppure se lo si deve creare manmano...

:) ...infatti, io l'ho riscitto in modo che utilizzi il repeat-until (come gli ha detto il prof, anche se non mi piace molto) per l'inserimento dei dati.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

:) ...infatti, io l'ho riscitto in modo che utilizzi il repeat-until (come gli ha detto il prof, anche se non mi piace molto) per l'inserimento dei dati.

Sì, ho visto ma ormai avevo postato :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Grazie!^^ No potreste codificarlmelo in Dev-Pascal? :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Grazie!^^ No potreste codificarlmelo in Dev-Pascal? :)

Secondo me è giusto che tu faccia lameno questo :P

Oltretutto non conosco il Dev-Pascal, e quel poco che conoscevo me lo sono dimenticato! :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Secondo me è giusto che tu faccia lameno questo :)

Oltretutto non conosco il Dev-Pascal, e quel poco che conoscevo me lo sono dimenticato! :P

Si si ho provato (ogni tanto ci provo anche io!xD)

program computer;
var d, tpf, tp: string[80];
pz, cont: integer;
pzm, tot: real;
risp: char;
begin
 tot:=0;
 cont:=0;
 Writeln('Inserisci il tipo di pc prefissato');
 readln(tpf);
 repeat
writeln('Inserisci la descrizione del pc');
readln(d);
writeln('Inserisci il tipo di pc');
readln(tp);
writeln('Inserisci il prezzo del pc');
readln(pz);
if tp=tpf then
writeln('Il computer: ',d,' costa: ',pz);
tot:=tot+pz;
cont:=cont+1;
writeln('Algoritmo e finito? (s/n)');
readln(risp);
until risp='s';
pzm:=tot/cont;
writeln('Il prezzo medio è: ',pzm);
readln;
end.

Speriamo che l'ho fatto bene!xD

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Si si ho provato (ogni tanto ci provo anche io!xD)

program computer;
var d, tpf, tp: string[80];
pz, cont: integer;
pzm, tot: real;
risp: char;
begin
 tot:=0;
 cont:=0;
 Writeln('Inserisci il tipo di pc prefissato');
 readln(tpf);
 repeat
writeln('Inserisci la descrizione del pc');
readln(d);
writeln('Inserisci il tipo di pc');
readln(tp);
writeln('Inserisci il prezzo del pc');
readln(pz);
if tp=tpf then
writeln('Il computer: ',d,' costa: ',pz);
tot:=tot+pz;
cont:=cont+1;
writeln('Algoritmo e finito? (s/n)');
readln(risp);
until risp='s';
pzm:=tot/cont;
writeln('Il prezzo medio è: ',pzm);
readln;
end.

Speriamo che l'ho fatto bene!xD

:):P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Grazie!^^

Ora ne sto facendo uno da solo ma vorrei solo un piccolo aiutino:

il testo dice:"Dato un elenco di docenti con nome, cognome e materia di insegnamento, visualizzare nome e cognome dei docenti di matematica"

è simile a questo che ho precedentemente scritto ma, secondo voi, satno al testo, bisogna o no inserire una variabile che dichiari il numero dei docenti?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Grazie!^^

Ora ne sto facendo uno da solo ma vorrei solo un piccolo aiutino:

il testo dice:"Dato un elenco di docenti con nome, cognome e materia di insegnamento, visualizzare nome e cognome dei docenti di matematica"

è simile a questo che ho precedentemente scritto ma, secondo voi, satno al testo, bisogna o no inserire una variabile che dichiari il numero dei docenti?

Beh, dipende.

Al ciclo devi dare una fine, altrimenti gira all'infinito.

SE utilizzi un ciclo FOR devi sapere il numero esatto dei docenti.

SE utilizzi un ciclo WHILE (o un REPEAT UNTIL) il numero è indeterminato e esce dal ciclo solo ad una determinata condizione (es. nel caso Nome_docente=fine), dato che noto che non siete ancora arrivati agli array, quindi quello che inserisci al momento anche lo mostri.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Si! Usiamo Repeat, Until di nuovo...

Quindi così andrebbe bene?

Program docenti;
var n: integer;
nm, cg, mt: string[40];
risp: char;
begin
  writeln('Inserisci il numero dei docenti');
  readln(n);
  repeat
writeln('Inserisci il nome del docente');
readln(nm);
writeln('Inserisci il cognome del docente');
readln(cg);
writeln('Inserisci la materia di insegnamento');
readln(mt);
if mt='matematica' then
 begin
  writeln(' Il professore: ',nm,cg,' insegna matematica');
 end;
writeln('L elenco e terminato? (s/n)');
readln(risp);
until risp='s';
readln;
end.

Naturalmente dovrei correggere la parte iniziale, visto che non serve dare una variabile per inserire il numero dei docenti!^^

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Si! Usiamo Repeat, Until di nuovo...

Quindi così andrebbe bene?

Program docenti;
var n: integer;
nm, cg, mt: string[40];
risp: char;
begin
  writeln('Inserisci il numero dei docenti');
  readln(n);
  repeat
writeln('Inserisci il nome del docente');
readln(nm);
writeln('Inserisci il cognome del docente');
readln(cg);
writeln('Inserisci la materia di insegnamento');
readln(mt);
if mt='matematica' then
 begin
  writeln(' Il professore: ',nm,cg,' insegna matematica');
 end;
writeln('L elenco e terminato? (s/n)');
readln(risp);
until risp='s';
readln;
end.

Naturalmente dovrei correggere la parte iniziale, visto che non serve dare una variabile per inserire il numero dei docenti!^^

Sì, così va bene :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Mi sorgono alcune domande:

-perchè richiedi il numero dei prof se tanto poi non te ne fai nulla?

- perchè hai messo quel readln; finale?? Che valore dovrebbe leggere? :)

Inoltre:

-nell'IF il Begin e End potevi anche ometterli dato che si tratta di un'unica istruzione; ;-)

-aggiungi uno spazio tra nm,cg , altrimenti si leggerà MarioRossi invece di Mario Rossi :P

PS: le mie conoscenze di Pascal sono assai minime e antiche...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Mi sorgono alcune domande:

-perchè richiedi il numero dei prof se tanto poi non te ne fai nulla?

- perchè hai messo quel readln; finale?? Che valore dovrebbe leggere? :)

Inoltre:

-nell'IF il Begin e End potevi anche ometterli dato che si tratta di un'unica istruzione; ;-)

-aggiungi uno spazio tra nm,cg , altrimenti si leggerà MarioRossi invece di Mario Rossi :P

PS: le mie conoscenze di Pascal sono assai minime e antiche...

La richiesta del numero di prof l'ha già detto lui che doveva essere eliminata ;-)

Il readln finale suppongo serve per evitare che si chiuda la shell... Con il readln obbligo il programma ad aspettare l'inserimento di qualcosa prima di contiunare (e finire).

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Il readln finale suppongo serve per evitare che si chiuda la shell... Con il readln obbligo il programma ad aspettare l'inserimento di qualcosa prima di contiunare (e finire).

Ah, già :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Cosa potrei aggiungerci prima del repeat?

Potrebbe anche andar bene se non aggiungo nulla?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Cosa potrei aggiungerci prima del repeat?

Potrebbe anche andar bene se non aggiungo nulla?

Certo che và bene lo stesso.

Cosa vorresti aggiungerci? :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Certo che và bene lo stesso.

Cosa vorresti aggiungerci? :)

No Nulla!!xD

Faccio queste domande un po così per capire un po di più in Pacal e del suo corretto uso! Anche perchè Lunedì ho il compito di Informatica e sicuramente, parole del prof, uscirà il costrutto iterazione (Repeat-Until)...Speriamo Bene!^^

Grazie mille ragazzi!^^

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

In bocca al lupo allora...

...oppure in c**o alla balena (se preferisci :) ).

;-)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0