Defected

Sempre I Soliti Algoritmi...

50 messaggi in questa discussione

Inviato (modificato)

Mi scuso in partenza con voi per non essere presente sempre sul forum, anche perchè ultimamente ho avuto problemi di connessione. Però, grazie a voi, sto ottendo ottimi risultati a scuola e su questo ve ne sono grato. Però questi ultimi due algoritmi che ha assegnato la professoressa, sinceramente, non ci ho capito proprio nulla. Forse perchè sono stato assente a scuola per un bel poò, oppure sono proprio io che non mi ci voglio applicare, ma comunque i due esercizi sono i seguenti:

Dato un elenco di n ciclomotori(nome, modello, cilindrata e prezzo) contare il numero di modelli di cilindrata superiore a 50 e visualizzare insieme alla corrispondente percentuale

Na mezza cosa l'ho fatta, poi non so andare più avanti:

Program ciclomotori;
var i,  n, tot, cc, pz: integer;
nm, md: string[40];
pc: real;
begin
 tot:=0;
 writeln('Inserisci il numero di ciclomotori');
 readln(n);
 for i:=1 to n do
 begin
  writeln('Inserisci il nome del motociclo');
  readln(nm);
  writeln('Inserisci il modello del motociclo');
  readln(md);
  writeln('Inserisci la cilindrata');
  readln(cc);
  writeln('Inserisci il prezzo');
  readln(pz);
 end;
  if cc>50 then
...

Poi quest'altro qui, che ancora non ho iniziato:

Degli n movimenti effettuati sugli articoli di un magazzino si conoscono : codice, articolo, data, quantità. la quantità può essere positiva se il movimento un carico e negativa se uno scarico. Visualizzare la somma della quantità positiva e negativa

So che potete aiutarmi! Grazie di tutto!^^

Modificato da Def

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Vi prego, è importante!**

Almeno il primo!**

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Program ciclomotori;
var i,  n, tot, cc, pz, perc: integer;
nm, md: string[40];
pc: real;
begin
 tot:=0;
 writeln('Inserisci il numero di ciclomotori');
 readln(n);
 for i:=1 to n do
 begin
  writeln('Inserisci il nome del motociclo');
  readln(nm);
  writeln('Inserisci il modello del motociclo');
  readln(md);
  writeln('Inserisci la cilindrata');
  readln(cc);
  if (cc>50) then tot:=tot+1;
  writeln('Inserisci il prezzo');
  readln(pz);
 end;
perc:=(tot*100)/n;
writeln('Sono presenti ",tot," motorini con cilindrata superiore a 50cc e la percentuale è del ",perc,"%.");

L'avevi quasi finito ;-)

In teoria dovrebbe essere a posto (dopo aver corretto l'ultimo writeln) :P

Provalo e fammi sapere :)

PS: non sò come si fà con questo linguaggio a mostrare le variabili in mezzo al testo... :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ti ringrazio! Sei stao gentilissimo!^^

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Mi aiutereste anche in quest'altro? Grazie^^:

Degli n movimenti effettuati sugli articoli di un magazzino si conoscono : codice, articolo, data, quantità. la quantità può essere positiva se il movimento un carico e negativa se uno scarico. Visualizzare la somma della quantità positiva e negativa

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Vi prego, è importante!** Altrimenti mi becco un bel 2!xD GRAZIE!**

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Vi prego, è importante!** Altrimenti mi becco un bel 2!xD GRAZIE!**

Il programma è sempre in C, vero?

Che strutture conosci di questo linguaggio (in modo da sapere come quale tecnica poterlo utilizzare :P) Tu come lo affronteresti il problema? Cosa useresti?

Alla fine non è difficile dai, tutto si risolve con un bel ciclo dove sommi i positivi ed i negativi separatamente e dare questi due risultati come output :P

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Beh userei questo tipo di struttura

for i:=1 to n do

Anche quest'altra:

if .... then

Ma la cosa più assurda non è come svolgere questo in Devpas, è che non ho capito un tubo del problema. Non so da dove devo iniziare.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Beh userei questo tipo di struttura

for i:=1 to n do

Anche quest'altra:

if .... then

Ma la cosa più assurda non è come svolgere questo in Devpas, è che non ho capito un tubo del problema. Non so da dove devo iniziare.

Ah Pascal... Ricordavo male il linguaggio utilizzato da voi :P

Prima domanda: Li avete fatti i Record?

Seconda domanda: Quali cicli conoscete? Solo il for?

Il problema è semplice:Tu hai a tua disposizione un elenco con gli articoli del magazzino. Ogni elemento di questo elenco contiene le seguenti informazioni:

- codice artidolo

- data

- quantità

Inoltre sai che se la quantità dell'articolo è positiva allora quell'articolo è stato caricato (messo in magazzino) tot volte (tot = quantità). Se la quantità è negativa allora quell'articolo è stato scaricato (tolto dal magazzino) tot volte (tot = |quantità|).

In output devi dire il totale di tutti gli articoli messi in magazzino ed il totale di tutti gli articoli tolti dal magazzino.

Come presupposto puoi pensare di avere già questo elenco di articoli (e per l'esercizio te ne prepari uno tuo). Oppure puoi inserire una parte di codice che permette di inserire gli elementi all'interno dell'elenco...

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Non li abbiamo ancora affrontati questi record.

Altri cicli conosco il "Repeat-Until", "Fo i:= .. to .. do", "while...do" e basta. Stiamo da poco affrontando gli array.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Non li abbiamo ancora affrontati questi record.

Altri cicli conosco il "Repeat-Until", "Fo i:= .. to .. do", "while...do" e basta. Stiamo da poco affrontando gli array.

Allora simuliamo i record con 3 array. Ogni array contiene i dati di un certo tipo:

- codArt[1..n]

- data[1..n]

- quantità[1..n]

facciamo che tu hai già pronti questi 3 array di lunghezza n con i dati inseriti.

Lo stesso indice fanno riferimento allo stesso articolo. Ad esempio il primo articolo avrà il codArt in posizione 1 del primo array, la data in posizione 1 del secondo array e la quantità in posizione 1 del terzo array.

Quindi non fai altro che fare un ciclo che va da 1 a n e per ogni articolo controllo la quantità. Se questa è positiva la sommi alla variabile caricati se invece è negativa la sommi alla variabile scaricati che sono l'output del tuo programma...

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ma gli array la prof. li ha solo accenati, ancora non ce li ha spiegati.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ma gli array la prof. li ha solo accenati, ancora non ce li ha spiegati.

Ok, allora facciamo tutto senza array ;-)

  1. Chiedo all'utente quanti "articoli" vuole inserire;
  2. Inizializzo a 0 la variabile caricati;
  3. Inizializzo a 0 la variabile scaricati;
  4. Eseguo un ciclo che va da 1 a n. Ad ogni passaggio del ciclo

    1. Chiedo all'utente l'id dell'articolo
    2. Chiedo all'utente la data dell'articolo
    3. Chiedo all'utente la quantità di articolo
    4. Se la quantità è positiva la aggiungo alla variabile caricati, altrimenti (se è negativa) la aggiungo alla variabile scaricati;

[*]Una volta finito il ciclo visualizzo le due variabili

:P

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Quindi allora non interessa quali articoli siano scaricati o caricati...

se prima carico 50 macchine e 20 galline e poi scarico 30 macchine il programma ti dà risultato 40.

Nel caso invece lo implementassi con gli array (ma purtroppo devi ancora arrivarci) puoi far in modo che ti dia (nel caso precedente) che sono rimaste 20 macchie e 20 galline. ;-)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Per la variabile dei caricati e degli scaricati, che ci scrivo? Uso un Totalizzatore o un contatore?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Comunque se volete un mio cosiglio, fate prima se me lo scrivete in Pascal, magari ci capisco meglio!^^ Grazie!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Comunque se volete un mio cosiglio, fate prima se me lo scrivete in Pascal, magari ci capisco meglio!^^ Grazie!

Ma così ti risolviamo l'esercizio... Poi tu che fai? :)

Non devi far altro che tradurre in pascal quello che ti ho scritto in italiano... Dai non è difficile, solo un po' di ragionamento e, se hai imparato le basi della programmazione, una traduzione 1 a 1 di quello che leggi li...

Secondo te le variabili caricati e scaricati cosa devono essere?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ti giuro, Prozac, sul serio, non ci ho capito nulla. Potresti convertirmelo in Pascal, Please?*_*

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ti giuro, Prozac, sul serio, non ci ho capito nulla. Potresti convertirmelo in Pascal, Please?*_*

Eh no dai...finora te li abbiamo sempre fatti noi.

E' giusto che ti sforzi almeno un pochino (fidati che devi solo fare una traduzione letterale perchè Prozac te l'ha già fornita in linguaggio normale) ;-)

E poi...non si discosta quasi per nulla dai precedenti!! :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Inviato (modificato)

Ora ci provo! Poi se sbaglio mi correggete!xD Devo portarlo domani a scuola altrimenti la prof mi mette un bell' impreparato!xD

Modificato da Def

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ora ci provo! Poi se sbaglio mi correggete!xD Devo portarlo domani a scuola altrimenti quella panzona della prfo mi mette un bell' impreparato!xD

Ok, tu scrivici il tuo algoritmo e lo ragioniamo assieme ;-)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ho provato:

Program merci;
var n, i, qt, tot: integer;
cd, art, dt: string[30];
begin
 tot:=0;
 writeln('Inserisci il numero di movimenti nel magazzino');
 readln(n);
 for i:= 1 to n do
 begin
writeln('Inserisci il codice dell articolo');
readln(cd);
writeln('Inserisci il nome dell articolo');
readln(art);
writeln('Inserisci la data del movimento');
readln(dt);
writeln('Inserisci la quantità');
readln(qt);
tot:=tot+qt;
if qt>0 then
writeln('La merce è un carico');
else
writeln('La mercè è uno scarico');
 end;
 readln;
end.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ho provato:

Program merci;
var n, i, qt, tot: integer;
cd, art, dt: string[30];
begin
 tot:=0;
 writeln('Inserisci il numero di movimenti nel magazzino');
 readln(n);
 for i:= 1 to n do
 begin
writeln('Inserisci il codice dell articolo');
readln(cd);
writeln('Inserisci il nome dell articolo');
readln(art);
writeln('Inserisci la data del movimento');
readln(dt);
writeln('Inserisci la quantità');
readln(qt);
tot:=tot+qt;
if qt>0 then
writeln('La merce è un carico');
else
writeln('La mercè è uno scarico');
 end;
 readln;
end.

Il codice che hai inserito è quasi corretto.

Quello che devi dare come risultato, pero' e' sia la quantità di merce caricata che la quantità di merce scaricata.

Tu all'interno del ciclo fai un controllo sul tipo di quantità (qt>0). Oltre a scrivere a video che tipo di merce è (carico o scarico) potresti anche aggiungere quella determinata quantità al totalizzatore adatto (carico o scarico). Quindi alla fine il tot non ti serve... Ma ti servono 2 tot: quello per il carico e quello per lo scarico :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

è questi due totalizzatori come li potrei scrivere?

scrivo tot:=|quantità| e tot:=quantità.

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