| V I S U A L I Z Z A D I S C U S S I O N E |
| Chilavert |
Inserito il - 11/07/2005 : 19:30:13 Posto la soluzione del laboratorio di oggi. Chiedeva di inserire una matrice di nxm caratteri, stamparla e calcolare per ogni riga il carattere minimo.
matrici.zip
program esame;
const dimen = 50; type matrice = array[1..dimen, 1..dimen] of char; _____vettore = array[1..dimen] of char; var a: matrice; ____v: vettore; ____n, m: integer;
procedure inserisci(var a: matrice; n, m: integer); var i, j: integer; begin ___writeln; ___for i:=1 to n do ______begin ______for j:=1 to m do _________repeat ____________write('Inserisci l''elemento (', i, ', ', j, '): '); ____________readln(a[i, j]) _________until (a[i, j] >= 'a') and (a[i, j] <= 'z'); ______writeln ______end end;
procedure stampamat(var a: matrice; n, m: integer); var i, j: integer; begin ___writeln; ___writeln('La matrice inserita e'' la seguente'); ___writeln; ___for i:=1 to n do ______begin ______write('[ '); ______for j:=1 to m do _________write(a[i, j], ' '); ______writeln(']') ______end end;
procedure calcola(var a: matrice; n, m: integer; var v: vettore); var i, j: integer; ____min: char; begin ___for i:=1 to n do ______begin ______min:= a[i, 1]; ______for j:=2 to m do _________if (a[i, j] < min) then ____________min:= a[i, j]; ______v[i]:=min ______end end;
procedure stampavet(var v: vettore; n: integer); var i: integer; begin ___writeln; ___writeln('Questo e'' il vettore dei minimi di ogni riga'); ___writeln; ___write('[ '); ___for i:=1 to n do ______write(v[i], ' '); ___writeln(']'); end;
begin ___repeat ______write('Inserisci numero di righe: '); ______readln(n); ___until ((n > 0) and (n <= dimen)); ___repeat ______write('Inserisci numero di colonne: '); ______readln(m); ___until ((m > 0) and (m <= dimen)); ___inserisci(a, n, m); ___stampamat(a, n, m); ___calcola(a, n, m, v); ___stampavet(v, n); ___readln end. |
| 4 U L T I M E R I S P O S T E (in alto le più recenti) |
| Sinkler |
Inserito il - 11/07/2005 : 23:29:31 Citazione: Messaggio inserito da KernelFolla Altra cosa, se non ricordo male a volte per motivi mistici l'input stream si mantiene un carattere, che nel tuo caso e' un ritorno a capo che viene letto quando chiede il primo elemento della matrice e quindi lo salta, aggiungendo un readkey all'inizio della procedura crea dovresti aver risolto
a saperla sta cosa... il bello è che solo a me si manteneva il carattere perciò ho cominciato a pensare che era il progr che nn andava... vabbè pazienza ora lo so la prox volta mi porto una bella dozzina di readln |
| n/a |
Inserito il - 11/07/2005 : 23:28:31 da appuntilinux:
Le procedure Read() e Readln() permettono di leggere dallo standard input dei valori per le variabili che vengono indicate come parametri della chiamata. I dati inseriti, vengono distinti in base all'inserimento di spaziature, così come avviene di solito con gli argomenti di un comando del sistema operativo.
La differenza tra le due procedure sta nel fatto che Readln() dovrebbe restituire l'eco del codice di interruzione di riga, quando si preme [Invio] per concludere l'inserimento dei dati, mentre Read() no. In pratica, può darsi che il compilatore non riesca a distinguere tra le due procedure, e si comporti sempre nello stesso modo.
ecco l'arcano motivo |
| n/a |
Inserito il - 11/07/2005 : 23:07:59 Il writeln serve a farti tornare a capo a ogni ciclo del primo for quindi a ogni "riga" della matrice
sicuro che questo c'e' scritto nelle prime 10 pagine del Bishop
Altra cosa, usa readkey anziche' readln quando devi premere solo un tasto. Altra cosa, se non ricordo male a volte per motivi mistici l'input stream si mantiene un carattere, che nel tuo caso e' un ritorno a capo che viene letto quando chiede il primo elemento della matrice e quindi lo salta, aggiungendo un readkey all'inizio della procedura crea dovresti aver risolto |
| Sinkler |
Inserito il - 11/07/2005 : 22:11:36 io invece nn capisco perkè ho fatto esattamente come stava scritto sulle dispense http://www.di.uniba.it/~lops/programmazione/Matrici.pdf e nn mi è uscito:
/////////////////////////////////////////////////// program esame(input,output); const a=50; ______b=50; type matrice=array[1..a,1..b] of char;
var mA:matrice; ______n,m:integer;
procedure crea(var a:matrice ; k,h:integer); var i,j:integer; begin __for i:=1 to k do ___begin ____for j:=1 to h do _____begin ______writeln('Inserisci un numero nella riga ',i,'colonna ',j,': '); ______readln(a[i,j]); _____end; ___end; end;
procedure stampa(var a:matrice ; k,h:integer); var i,j:integer; begin _for i:=1 to k do __begin ___for j:=1 to h do ___begin ____write(' ',a[i,j],' '); ___end; __end; end;
(*MAIN*) begin writeln('Quanti elementi vuoi inserire nelle righe?'); read(n); writeln('Quanti elementi vuoi inserire nelle colonne?'); read(m); crea(mA,n,m); readln; stampa(mA,n,m); readln; end. //////////////////////////////////////////////////////
poi a casa ho scoperto che non è uscito perkè non mettevo un writeln nella procedura di stampa prima del secondo end...
procedure stampa(var a:matrice ; k,h:integer); var i,j:integer; begin _for i:=1 to k do __begin ___for j:=1 to h do ___begin ____write(' ',a[i,j],' '); ___end; __writeln; __end; end;
il problema è : a che serve quel writeln?? questo non ho capito!!se qualcuno me lo spiega per favore... cmq un'altra cosa strana che non capisco è che questo programma(corretto con i writeln) eseguito da Chila esce, eseguito da me, esce sta schifezza esattamente come al laboratorio:

mi salta il primo elemento!
poi perkè proprio oggi ha messo le matrici?? quando ho visto la traccia mi veniva da  lo so, sono facili ma su tutti gli appelli che abbiamo scaricato dal sito del prof per esercitarci non ce ne sta uno con le matrici... e noi scemi a esercitarci su file e array... vabbè sulla traccia c'era scritto :"ci rivediamo a settembre"
|
|
|