gość123456789 Posted February 18, 2017 Report Share Posted February 18, 2017 Witam, mam zrobić na informatykę taki program i mam z tym problem. W pliku rekordowym o nazwie 'dane.dat' umieszczono ciąg liczb całkowitych których wartości w założeniach miały być kolejno: większe i mniejsze od zera (równe zeru potraktować jak mniejsze). Napisać procedure lub funkcję z których: a) pierwsza, sprawdzi czy rzeczywiście tak jest, b) druga, przepisze do n elementowej tablicy A liczby dodatnie (n należy podać jako argument, proces przerwać po znalezieniu n-tego elementu). Napisałem coś takiego i procedura z podpunktu b działa ale z funkcją z podpunktu a mam problem. A mianowicie funkcja działa dobrze jeśli wprowadzam parzystą ilość liczb, a dla nieparzystej ilości nie chce działać. Pisałem ten program w Lazarusie IDE v1.6. Funkcja nazywa się Sprawdź. Pomoże ktoś?? program zestaw1_poprawka3; uses Crt; type Tplik=file of integer; Ttab=array[1..100] of integer; var p:Tplik; A:Ttab; n:byte; {...........} procedure Wprowadz(var p:Tplik; n:integer); var x:integer; i:integer; begin Rewrite(p); if n>=100 then exit; for i:=1 to n do begin write(i,' liczba: '); readln(x); write(p,x); end; Close(p); end; {............} function Sprawdz(var p:Tplik):boolean; var x,y:integer; begin Reset(p); if not eof(p) then read(p,x); while not eof(p) do begin read(p,y); if ((x>0) and (y<=0)) or ((x<=0) and (y>0)) then Sprawdz:=True else Sprawdz:=False; end; Close(p); end; {..........} procedure Wyswietl(var p:Tplik); var x:integer; begin Reset(p); while not eof(p) do begin read(p,x); writeln(x:3); end; Close(p); end; {................} procedure Przepisz(var p:Tplik; var A:Ttab; var n:byte); var x:integer; begin Reset(p); n:=0; while not eof(p) do begin if n>=100 then break; read(p,x); if x>0 then begin n:=n+1; A[n]:=x; end; end; Close(p); end; {................} procedure Wyswietl_tab(var n:byte; var A:Ttab); var i:integer; begin for i:=1 to n do write(A[i]:5,' '); end; {...........} begin ClrScr; write('Ile bedzie liczb: '); readln(n); Assign(p,'dane.dat'); Wprowadz(p,n); writeln; Sprawdz(p); writeln(Sprawdz(p)); Wyswietl(p); writeln; Przepisz(p,A,n); writeln('Przepisana tablica: '); Wyswietl_tab(n,A); Readkey; end. Link to comment Share on other sites More sharing options...
gość123456789 Posted February 19, 2017 Author Report Share Posted February 19, 2017 pomoże ktoś?? Link to comment Share on other sites More sharing options...
olesio Posted February 21, 2017 Report Share Posted February 21, 2017 Wklej kod na jakiś zewnętrzny pastebin, bo tutejszy rozwala formatowanie. Oczywiscie kod wrzucony sformatuj i sensowniej ponazywaj większość zmiennych. Teraz się na ten kod nie da spojrzeć, a kiedy się już będzie dawało to pewnie znajdzie się ktoś, kto pomoże Ci. Pozdrawiam: olesio Link to comment Share on other sites More sharing options...
Kaczus Posted February 27, 2017 Report Share Posted February 27, 2017 Przecież jest napisane, że masz sprawdzić, czy kolejne liczby są na przemian albo dodatnie, a następna niedodatnia. więc 1) ustalasz jaka jest pierwsza wartość 2) sprawdzasz, w zaleznosci od tego kolejne... czyli powiedzmy zmienna sprawdzamczydodatnia: boolean; początkowa wartość po przeczytaniu pierwszej wartości (powiedzmy, ze wartości wczytujemy do Twojej zmiennej x) ustalamy: sprawdzamczydodatnia := x <=0; dodatkowo, jeśli warunek jest niespełniony w połowie bezsensownie jest sprawdzać dalej, wiec warunek stopu do poprawienia. zamiast ifa, dałbym wtedy result := (sprawdzamczydodatnia AND (x >0)) or (( not sprawdzamczydodatnia) AND (x <=0)) nie zapomnij po kazdej iteracji zmieic sprawdzamczydodatnia := not sprawdzamczydodatnia tyle podpowiedzi. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.