gość123456789 Napisano Luty 18, 2017 Zgłoś Share Napisano Luty 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 do komentarza Udostępnij na innych stronach More sharing options...
gość123456789 Napisano Luty 19, 2017 Autor Zgłoś Share Napisano Luty 19, 2017 pomoże ktoś?? Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Luty 21, 2017 Zgłoś Share Napisano Luty 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 do komentarza Udostępnij na innych stronach More sharing options...
Kaczus Napisano Luty 27, 2017 Zgłoś Share Napisano Luty 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 do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.