FONForum http://678540.1rf3m2gpa.asia/ |
|
Ne mogu da nadjem gresku u programu - Greska u paskal programu http://678540.1rf3m2gpa.asia/viewtopic.php?f=8&t=1136 |
Stranica 1 od 1 |
Autoru: | hodac [ 21.12.2002. 00:34:44 ] |
Tema posta: | |
Oki, program sluz za citanje datoteke, u kojoj se nalaze redom prvo visina pa tezina ucenika.Program treba da izracuna srednju vrednost poslednjih 5(Kod mene je to ostavljeno korisniku) studenata.Pri testiranju se pokazalo da ne daje tacno resenje.Trazio sam gresku, cak mi je i asisten pomagao ali nismo uspeli da je pronadjemo.Znam da je program mogao inteligentnije da se resi.Ali citanje datoteke sa while not eof je uslovilo ovak vid resenja (Moglo je i preko sloga da se rese, ali mislim da je ovako brze). Kod: Program domac3;
uses crt; const perr='Pogresan unos!Pokusajte ponovo!'#7; type f=file of real; tniz=array [1..100] of real; var datoteka:f; brojac:integer; visina,tezina:tniz; {Kraj definicije promenjivih glavnog programa} procedure dalje; {Nastavak uslovljava pritisak nekog tastera} begin writeln('za nastavak pritisnite neki taster'); readln; end; procedure provunosa (var izlaz:integer); {procedura sluzi za proveru unosa unos joj je samo vrednost promenjive na izlazu, unos je u okviru nje} var unos:string[10]; kontrolna:integer; begin repeat writeln ('Unesi Trazenu vrednost '); readln (unos); val (unos,izlaz,kontrolna); {Uzavisnosti od potreba ispraviti drugu uslovnu} if (izlaz<0) or (izlaz>7) or (kontrolna<>0) then writeln (perr); until (izlaz>-1) and (izlaz<8) and (kontrolna=0); end; procedure citaj(var brojac:integer;var visina,tezina:tniz;var datoteka:f); {treba da iscita datoteku} var log:boolean;{Za repeat petlju kod provere teke} i:integer; {I da upise vrednosti u dva nova niza ,tezina i visina} putanja:string[255]; begin brojac:=1;{Da prebroji koliko ukupno ima clanova} i:=0; {Za indeksiranje oba niza} writeln (' Molimo vas dajte putanju do datoteke'); repeat readln (putanja); {Mogucnost da sam korisnik definise putanju ka datoteci} assign(datoteka,putanja);{$i-} reset(datoteka); {$i+} {Provera ispravnosti same datoteke} if ioresult<>0 then begin writeln(perr);dalje;log:=false; end else log:=true; {ako datoteka nije u redu sistem salje poruku o gresci i gasi program} until log=true; while not eof (datoteka) do {Koristio while to je odmah povuklo Koriscenje ovih metoda} begin i:=i+1; {Jer sam na pocetku stavio 0} read (datoteka,visina[i],tezina[i]); brojac:=brojac +1; end; close(datoteka);brojac:=brojac-1; end; {Srz programa-esencija} function esenci(nizx:tniz;brojac:integer;oduzmi:integer ):real; var {Data funkcija treba da vrati vrednost srednje vrednosti proizvodnog broja zadnjih clanova niza} i:integer; sre:real; BEGIN sre:=0; begin FOR i:=(brojac - oduzmi) to brojac do sre:=sre+nizx[i]; end; esenci:=sre/oduzmi; end; procedure Uvod; {Smesna procedura ali mora se} begin writeln; writeln; writeln(' Ovaj program Sluzi za odredjevanje srednje visene'); writeln(' i tezine proizvodnog broja studenata'); writeln; end; procedure Meni(visina,tezina:tniz;brojac:integer); {Meni, trebalo ga je jos rasclaniti jer se jedan deo operacija izvrsava i u njemu} var izbor:char; poruka:string;x:integer; begin repeat writeln('********************************'); writeln('* M E N I *'); writeln('* *'); writeln('* 1.Odresi srednju visinu '); writeln('* 2.Odresi srednju tezinu *'); writeln('* 3.KRAJ *'); writeln('********************************'); writeln; writeln; writeln('Vas izbor je: '); izbor:=readkey; case izbor of '1':begin writeln ('Sada unesite za koji broj poslednjih studenata'); writeln ('se izracunava srednja vrednost'); provunosa(x); {Unosi se opcioni broj zadnjih} writeln; writeln ('srednja visina poslednjih ',x,' Studenata je '); writeln(esenci(visina,brojac,x):10:4); {Treba da vrati rezultat} writeln;end; '2':begin writeln ('Sada unesite za koji broj poslednjih studenata'); writeln ('se izracunava srednja vrednost'); provunosa(x); {Slicno gore navedenom} writeln ('srednja tezina poslednjih ',x,' studenata je'); writeln(esenci(tezina,brojac,x):10:3); end; '3':begin writeln('Izabrali ste KRAJ!'); end; else writeln; writeln; writeln('Greska u unosu!'); end; until izbor='3'; end; (*********************************) {pocetak glavnog programa} begin textBackground (9); textcolor (3); clrscr; uvod; {Ovim sam samo pri startovanju} {Inicirao citanje datoteke i time smanjio vreme pristupa} {I omogucio da se parametri predju proceduri meni } citaj(brojac,visina,tezina,datoteka); {Koja dalje te parametre predaje proceduri esencija} meni(visina,tezina,brojac); end. {Nema vise narode} |
Autoru: | kruzer [ 21.12.2002. 01:14:28 ] |
Tema posta: | |
a gde je greska? kako se ispoljava? opisi malo... nemam kompajler pa ne mogu da je od oka vidim(da je C++ mozda bih i mogao;))), bilo bi dobro da si napisao gde je greska(u kojoj funkciji-proceduri kako se to kaze u pascalu)... jel znas da koristis debager u borland tp, ako taj koristis? btw: jel zna neko neki drugi kompajler za pascal a da je besplatan i da je za windows NT(2000)? |
Autoru: | hodac [ 22.12.2002. 04:07:43 ] |
Tema posta: | |
Pa greska je u rezultatu, recimo ako iz datoteke cita po 7 puta 6 za visinu i tezinu, srednja vrednost za poslednja 4 bila bi 5.4 (tu negde), znaci zadatak radi, ali ne mogu da skontam gde je greska.Postavljao sam i tacke prekida ali ovde sa njima nista ne postizem, takodje sam proverio i vrednosti koje dobija procedura citaj i one su tacne.Zaista nisam skontao u cemu je greska, cak je i asistent za 5 minuta koje je pregledao i pokusao da otkrije gresku nije uspeo. A naraavno da imas free kompajler za paskal.Probaj freepascal , mislim da ima i za windows. |
Autoru: | zlatko [ 23.12.2002. 01:48:03 ] |
Tema posta: | |
Re |
Autoru: | hodac [ 23.12.2002. 15:08:38 ] |
Tema posta: | |
da i ja sam otkrio u cemu je fazon.Da ce se for izbvrsiti for i:=1 to 1 do se izvrsava, najgore sto ni asistentu to nije palo napamet, stvarno suygava greska. |
Autoru: | hodac [ 26.12.2002. 18:49:17 ] |
Tema posta: | |
E znam da ima inteligentnije resenje.Znaci treba napisati program koji iz text datoteke, broji sve recenice, pod recenicom se smatra ona koja na kraju ima !,.i ,.... Cak mi treba i jedno rekurzivno resenje.Takodje ovaj zadatak ima i jedan nedostatak, jer nisam znao kako da odradim da recenica zahteva sem tacke i minimum jedno slovo. Kod: program recenice;
uses crt; var ime_dat:string; datoteka:text; kraj:boolean; (***Procedura za obradu datoteke****) procedure Obrada(var datoteka:text;ime_dat:string); var ch:char; br_rec:integer; begin clrscr; gotoxy(30,10); writeln('OBRADA U TOKU...'); gotoxy(1,1); br_rec:=0; ch:=' '; assign(datoteka,ime_dat); {$I-} reset(datoteka); if ioresult=0 then begin repeat read(datoteka,ch); if (ch='.') or (ch='!') or (ch='?') then br_rec:=br_rec+1; until eof(datoteka); clrscr; writeln('Statistike za datoteku "',ime_dat,'": '); writeln; if br_rec<>0 then writeln('Broj recenica: ',br_rec) else writeln('Broj recenica: 0 ,datoteka nema recenica ili nije txt tipa.'); end else begin clrscr; writeln('Datoteka "',ime_dat,'" ne postoji.'); end; {$I+} close(datoteka); end; (****Procedura za uvodni text i upis****) procedure Uvod(var ime_dat:string); begin clrscr; writeln('Ovaj program na osnovu zadate tekstualne datoteke'); writeln('kao rezultat daje broj recenica u toj datoteci.'); writeln; writeln('Potrebno je napisti putanju i/ili ime datoteke'); writeln('koju zelite da obradite (obavezno na kraju stavite'); writeln('ekstenziju datoteke npr. txt ili dat): '); writeln; writeln('Za izlaz stisnite "q".'); writeln; write('Ime datoteke je: '); readln(ime_dat); if (ime_dat='q') or (ime_dat='Q') then halt; Obrada(datoteka,ime_dat); end; (****Pocetak glavnog programa****) begin kraj:=false; repeat Uvod(ime_dat); until kraj; end. |
Autoru: | zlatko [ 27.12.2002. 16:25:02 ] |
Tema posta: | |
Evo ti nerekurzivno re |
Autoru: | hodac [ 27.12.2002. 18:39:29 ] |
Tema posta: | |
Ma program nisam ni testirao,odradio sam ga za 10 minuta, cisto da vidim sta iskusniji kazu.Hvala na kritikama, sve su na mestu.A o stilu, sta da kazem, nisam stigao da obrazlozim, uglavnom to i radim, ali rekoh brzina. Fora je sto me bas zanima rekurzivan nacin, a ja nisam skontao kako da ovo odradim, u sustini, vadjenje ce mi biti da ga uradim rekurzivno, posto sam se u proslom zadatku sje*ao sa for petljom.Hvala zlatko. |
Autoru: | zlatko [ 28.12.2002. 14:32:07 ] |
Tema posta: | |
Evo i rekurzije: [code] program recenice; {uses crt;} (***Rekurzivna procedura koja |
Autoru: | hodac [ 11.01.2003. 00:35:04 ] |
Tema posta: | |
Samo sta cemo posto readln ne moze da cuita ceo red, vec samo prvih 255 znakova (string ogranicenje), ipak i ovo mora sa repeat-until petljom i read.U svakom slucaju oki.Hvala ti , puno mi je pomoglo. |
Stranica 1 od 1 | Sva vremena su u UTC + 1 sat |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |