• 16 odgovora
  • 4.136 pregleda
ulaz>sortiranje>izlaz 20.06.2005. u 11:53 · pre 259 meseci #1
Ovo bi predstavljalo kod za citanje postojece datoteke:

Code:

program ulaz;
uses crt;
var a:file;
     b:string;
begin
clrscr;
assign(a,'c:\podaci.txt');
reset(a);
read(a,b);
write(b);
close(a);
readln;
end.


Ovo sortiranje podataka:
Code:

program sortiranje;
uses crt;
var i,j,n:integer;
    t,y:string;
begin
clrscr;
writeln('koliko imena:');
readln(n);
for j:=1 to n do
begin
readln(y[j]);
end;

for i:=n-1 downto 1 do
       for j:=1 to i do begin
                       if y[j]>y[j+1] then
                         begin
                                      t[j]:=y[j];
                             y[j]:=y[j+1];
                             y[j+1]:=t[j];
                          end;
                         end;

for j:=1 to n do
begin
writeln(y[j]);
end;
readln;
end.



Code:


A ovo bi bio ispis:

program izlaz;
uses crt;
var a:file;
     b:string;
begin
clrscr;
assign(a,'c:\podaci.txt');
reset(a);
seek(a, filesize(a));
write(a, sortirane podatke);
readln;
end.




Sad me zanima onaj prvi kod...kako ucitati podatke iz datoteke od prvog reda pa do zadnjega (while not (eof) blabla) te ih pritom odmah sortirati, te staviti u izlaz.txt-to ce onda vjerovatno biti rewrite(izlaz) jer ne postoji...Znaci ova tri programa stavit cu u jedan pa ce biti 3 procedure, i onda ih u glavnom dijelu pozvati po redu???
Znaci pitanje je kako ucitati podatke iz prvog do zadnjeg reda te ih pritom odmah sortirati..
Re: ulaz>sortiranje>izlaz 20.06.2005. u 13:21 · pre 259 meseci #2
Nisam bas razumeo pitanje...
Prvo Reset se ne korsiti za pisanje podataka u fail. U tvom kodu za upisivanje u dadoteku si koristio Reset a moras da koristis ReWrite, tj. da rezimiram:
[1] Reset = otvori vec postojecu dadoteku i iz nje se mogu samo citati podaci
[2] ReWrite = ukoliko takve dadoteke nema, on je napravi i otvori za upisivanje podataka u nju (ne i citanje). Ukoliko ona vec postoji onda on sve iz nje izbrise i pocinje u nju da upisuje od pocetka
[3] Append = ukoliko takve dadoteke nema. on je napravi i otvori za upisivanje. Ukoliko ona postoji, on ne brise podatke iz nje, vec pocinje njeno upisivanje od zadnjeg reda (dopunjuje je)...

Sto se tice tvog pitanja, pa ako sam te dobro shvatio ti samo treba da ih spojis njih tj. samo ne tvom programu za sortiranje ne ucitavas podatke i ne stampas ih...
(mrzelo me da ispravljam tvoj kod pa sam lupio moj)

Code:

{
PROGRAM: QuickSort
SLOZENOST: O(N log N)
}
program QuickSort;
const
  MaxN = 1000;
var
  a: array [1.. MaxN] of LongInt;
  n: LongInt;
  f, g: Text;

  procedure InPut;
  begin
    Assign (f,'niz.in');
    Reset (f);
    Read (f, n);
    for i := 1 to n do Read (f, a [i]);
    Close (f);
  end;

  procedure Sort (l, d: LongInt);
  var
    tmp, pivot, i, j: LongInt;
  begin
    if (l < d) then begin
      pivot := a [(l + d) DIV 2];
      i := l; j := d;
      repeat
        while (a [i] < pivot) do Inc (i);
           while (a [j] > pivot) do Dec (j);
           if (i <= j) then begin
             tmp := a [i]; a [i] := a [j]; a [j] := tmp;
             Inc (i); Dec (j);
           end;
      until (i > j);
      Sort (l, j);
      Sort (i, d);
    end;
  end;

  procedure OutPut;
  var
    i: LongInt;
  begin
    Assign (g, 'niz.out');
    ReWrite (g);
    for i := 1 to n do Write (g, a[ i], ' ');
    Close (g);
  end;

begin
  InPut;
  Sort (1, n);
  OutPut;
end.


Potpis
Math is like love. A simple idea but it can get complicated.
Re: ulaz>sortiranje>izlaz 20.06.2005. u 15:40 · pre 259 meseci #4
Ako koristis samo stringove onda ti Delphi moze uraditi sve
Format fajla bi trebao da bude ovakav

PERA
SIMA
DJURA
.
.
.

Znaci svako ime u svom redu i onda napises kod za recimo kad se klikne dugme
Code:
procedure Button1Click(Sender: TObject);
var
  S: TStringList;
begin
  S := TStringList.Create;
  S.LoadFromFile(ImeFajla);
  S.Sort;
  S.SaveToFile(ImeFajla);
  S.Free;
end;

Mnooogo lako, bree
Potpis
Play Store
Re: ulaz>sortiranje>izlaz 20.06.2005. u 16:19 · pre 259 meseci #5
Stvarno lako, al se spremam na natjecanje iz pascala pa moram u njemu vjezbat :)
A u delphiu sam poceo citat o nasljedjivanju, o konstruktorima i destruktorima ;)
Re: ulaz>sortiranje>izlaz 20.06.2005. u 17:06 · pre 259 meseci #6
Ajde ovako naslepo bez provere:

Code:

var
 f:text;
 niz: array[1..100] of string;
 i,j, duz: integer;
 t: String;
begin
 assign(f, 'ulaz.txt');
 reset(f);
 duz:=0;
 while not eof(f) do
  begin
    inc(duz);
    readln(f, niz[duz]);
  end;
  close(f);
  for i := duz-1 downto 1 do
    for j := 1 to i do
     if niz[j]>niz[j+1] then
       begin
         t := niz[j];
         niz[j]:= niz[j+1];
         niz[j+1] := t;
       end;
  assign(f,'izlaz.txt');
  rewrite(f);
  for i := 1 to duz do
    writeln(f, niz[i]);
  close(f);
end.



E sad jedno pitanje: Kako mislis da ides na takmicenje, kada ne znas da ucitas jednu obicnu text datoteku u niz? :)))) (mala sala)
Re: ulaz>sortiranje>izlaz 20.06.2005. u 17:52 · pre 259 meseci #7
Citat:
Srki_82: 
Znaci svako ime u svom redu i onda napises kod za recimo kad se klikne dugme
Code:
procedure Button1Click(Sender: TObject);
var
  S: TStringList;
begin
  S := TStringList.Create;
  S.LoadFromFile(ImeFajla);
  S.Sort;
  S.SaveToFile(ImeFajla);
  S.Free;
end;

Mnooogo lako, bree ;)


Sve je to lepo, ali po meni nebi trebalo nikada koristiti vec gotove algoritme za sortiranje koji su dati u sastav program (npr. i u C++ se moze odmah napisati qsort pa niz i on ga automatski sortira). Zasto? Prvo, kod je trivijalan i za njegovo kucanje je potrebno 2-3 minuta, a drugo ukoliko neko ne poznaje kod (koliko god to bilo tesko) kako ce on sortirati npr. jedan niz u rasticem poretku, a ukoliko su neka dva elementa ista onda se gleda njihova velicina u nekom drugom nizu (npr. pri sortiranju koordinata po X pa po Y)...
Potpis
Math is like love. A simple idea but it can get complicated.
Re: ulaz>sortiranje>izlaz 20.06.2005. u 17:54 · pre 259 meseci #8
Sto se tice samog algoritma pogledaj na "Art of Programming :: [Teorija algoritama] Skup poznatih algoritama i struktura podataka"... Tu ti je sve objasnjeno (by Srdjan Krstic)
Potpis
Math is like love. A simple idea but it can get complicated.
Re: ulaz>sortiranje>izlaz 20.06.2005. u 18:42 · pre 259 meseci #9
@cassey: ali moras priznati da nema svrhe izmisljati toplu vodu. Ako builtin funkcija radi posao nema potrebe pisati novu.
Potpis
Play Store
Re: ulaz>sortiranje>izlaz 20.06.2005. u 18:57 · pre 259 meseci #10
Slazem se sa Srki-jem, mada ne znam ni sam zasto, ali uvek napisem svoju max ili min funkciju iako takva vec postoji implementirana. :)
Re: ulaz>sortiranje>izlaz 20.06.2005. u 19:10 · pre 259 meseci #11
Dobro, nemojte se prepucavati
Ovako, treba napisati program koji ucitati ime i prezime od N osoba, a zatim ispisati po abecedi:
prvo ime
prvo prezime
drugo ime
drugo prezime
....
Evo test primjer
1.ime i prezime:Matija Matijevic
2.ime i prezime:Ana Zrinjac

E sada izlaz:
Ana
Matijevic
Matija
Zrinjac

Ok-to sam napravio ali potrebno je da se osoba spomene SAMO jednom, znaci ako smo spomenuli ANU necemo spomenuti i ZRINJAC jer je to jedna te ista osoba...
Znaci trebao bi izlaz biti:
Ana
Matijevic

Evo program koji sortira i ispise ali spomene svaku osobu 2 puta, pa ako neko zna kako to ispravit neka me samo orijentalno uputi a ne da RIJESI zadatak

Code:

program sortiranje;
uses crt;
var i,j,n:integer;
    ime,prezime,t:array [1..50] of string;
begin
clrscr;
writeln('Koliko osoba:');
readln(n);
clrscr;
for j:=1 to n do
begin
clrscr;
writeln(j,'.ime:');
readln(ime[j]);
writeln(j,'.prezime:');
readln(prezime[j]);
end;

for i:=n-1 downto 1 do
for j:=1 to i do
begin
if ime[j]>ime[j+1] then
begin
t[j]:=ime[j];
ime[j]:=ime[j+1];
ime[j+1]:=t[j];
end;
end;

clrscr;
for i:=n-1 downto 1 do
for j:=1 to i do
begin
if prezime[j]>prezime[j+1] then
begin
t[j]:=prezime[j];
prezime[j]:=prezime[j+1];
prezime[j+1]:=t[j];
end;
end;


for j:=1 to n do
begin
writeln(ime[j]);
writeln(prezime[j]);
end;



readln;
end.
Re: ulaz>sortiranje>izlaz 20.06.2005. u 19:37 · pre 259 meseci #12
Pa samo ih nekako pamti, tj. vezi ime i prezime jedne osobe, pa kad prvi put naidjes stampaj (ime ili prezime, sta god to bilo), a drugi preskoci...
Srecno...
Potpis
Math is like love. A simple idea but it can get complicated.
Re: ulaz>sortiranje>izlaz 20.06.2005. u 19:37 · pre 259 meseci #13
Evo necu vise da ti pisem programe, jer tako neces nista nauciti.

Pomoc:

Za sva ko ime i prezime moras da odredis njegov ID koji je jedinstven (znaci uvedes neki brojac)

Za Matiju ce biti:

1. Matija
1. Matijevic
2. Ana
2. Zrinjac
...

Kada sortiras imena ili prezimena sortiras ih zajedno sa tim ID (vezujes ih za njega).

Kada Zelis da ispises naprimer 2.Zrinjac, moras da proveris da li je pre toga u nizu imena iznad trenutnog indeksa koji ispisujes vec bilo ispisano ime sa ID-om.
Ako nije ispises i tako redom.
Re: ulaz>sortiranje>izlaz 20.06.2005. u 21:51 · pre 259 meseci #16
Pa u tvoj program treba da dodas samo 10-ak linija koda.
Re: ulaz>sortiranje>izlaz 21.06.2005. u 00:48 · pre 259 meseci #17
Napravi niz Mark [i] i na pocetku ga popuni sa False. Ukoliko iskoristis necije ime ili prezime ti ga postavi na True. Stampaces samo ukoliko je Mark [i] = False , pa onda ga promenis, tako da ces uvek jednom stampati ime ili prezime jedne osobe...
Potpis
Math is like love. A simple idea but it can get complicated.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme