Datuve :: Forums :: Arhīvs :: pascal help

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 95

Reģistrētie lietotāji online: 0

Viesi online: 95

Datuve.lv video
Top.LV

pascal help

Ievietoja: nuubik @ 2010.05.25 23:32  

Sveiki, es vershos pie jums peec palidziibas.
Tatad man ir sekojsh uzdevums:
Izstraadat galveno programmu un moduli tieshaas pieejas failu darbiibu analiizei.Failam jasatur fikseeta garuma ieraksti ( piem. simbolu rindas).Paredzeet apakashprogrammas sekojosham failu darbiibaam:
1. Jauna faila izveidoshana
2. Faila iesprashana faila ( peec paziimes )
3. Faila satura apskatiishana
Izveidot galveno programmu, kas lieto(teste) izstraadaato moduli

Tachu probleema ir taada, ka es nezinu ka vajag ieprogrammet to, lai failu iesprauzh failaa pec paziimes. Peec paziimes tas ir taa, ka, piemeram:

1. fails
1
2
3
?
<
-
+
32
.
,

2. fails
4
5
2
1
,
.
?

Un peec paziimes( kas var but jebkaada) tiek atrasta piemeram vieta kur 1. faila ir skaitlis 32 un aiz vinja tiek iesprausts otrais fails.
Varbuut kads gudraaks varetu apskatit manu kodu, palabot kljudas un pateikt ka varetu ieprogrammet lai sprauzh peec paziimes

Kods :

unit L3vien;
interface
type MIer = record
vards1: string [30];
vards2: string [30];
end;
type MFtips = file of MIer;
var MFErr: integer;
procedure FCreate (var fails: MFtips; nosaukums: string);
procedure FView (var fails: MFtips; nosaukums: string);
procedure FSpra (var fails: MFtips; nosaukums, vaards: string);
procedure FError;
implementation
uses CRT;

procedure FCreate (var fails: MFtips; nosaukums: string);
var i, j: integer;
atbilde: string [1];
ier: MIer;
label Taisit;
begin
assign (fails, nosaukums);
{$I-}
reset (fails);
{$I+}
if (ioresult = 0) then begin
writeln (nosaukums,' jau eksistee vai veidot to no jauna?');
writeln ('j/n');
read (atbilde);
if (atbilde = 'j') or (atbilde = 'J') then begin
writeln ('esoso failu paarrakstaam');
goto Taisit; end else begin
writeln ('Tiek saglabaats esosais fails');
close (fails);
MFErr:= 1;
exit; end; end;
Taisit:
writeln ('Cik ierakstus gatavot (skaita 0, 1, 2, ... n)?');
{$I-}
read (j);
{$I+}
if (ioresult <> 0) then begin
MFErr:= 2; j:=5; end;
{$I-}
rewrite (fails);
{$I+}
if (ioresult <> 0) then begin MFErr:= 3; exit; end;
ier.vards1:=' ';
ier.vards2:=' ';
for i:= 0 to j do begin
ier.vards1:= chr($61+i);
ier.vards2:= chr($30+i);
write (fails, ier);
end;
close (fails);
end;

procedure FView (var fails: MFtips; nosaukums: string);
var i: integer; ier: MIer;
begin
assign (fails, nosaukums);
{$I-}
reset (fails);
{$I+}
if (ioresult <> 0) then begin MFErr:= 4; exit; end;
i:= 0;
seek (fails, i);
while (eof (fails) <> true) do begin
read (fails, ier);
writeln ('Ieraksts #:', i:2 ,' ', ier.vards1,' ', ier.vards2);
i:= i+1;
end;
seek (fails, 0);
end;

procedure FSpra (var Fails: MFtips; nosaukums, vaards: string);
Label Beigas, Sakums, Sakums1;
var k, j, i, z, y, x, n: integer; ier: MIer; datne: MFtips;
begin
assign (datne, nosaukums);
{$I-}
reset (datne);
{$I+}
if (ioresult <> 0) then begin MFErr:= 4;exit; end;
z:= filesize (datne);
close (datne);
assign (fails, vaards);
{$I-}
reset (fails);
{$I+}
if (ioresult <> 0) then begin MFErr:= 4; exit; end;
y:= filesize (fails);
j:= trunc( y div 3);
n:=y mod 3;
close (fails);
y:=y-1;
if n>= 1 then begin
while n>= 1 do begin
reset (fails);
seek (fails, y);
read (fails, ier);
seek (fails, y+(j*z));
write (fails, ier);
n:= n-1; y:=y-1;
end;
j:=j-1;
close (fails);
goto sakums1;
end else begin j:=j-1; goto sakums1; end;
sakums1:
begin
reset (fails);
while (j>= 1) and (y>=0) do begin
for k:= 1 to 3 do begin
writeln (y);
reset (fails);
seek (fails, y);
read (fails, ier);
seek (fails, y+(j*z));
write (fails, ier);
y:=y-1;
close (fails);
end;
j:=j-1;
end;
end;
reset (fails);
y:= filesize (fails);
close (fails);
x:=3;
sakums:
i:=0;
while i <= (z-1) do begin
reset (datne);
seek (datne, i);
read (datne, ier);
close (datne);
reset (fails);
seek (fails, x);
write (fails, ier);
close (fails);
i:=i+1;
x:=x+1;
end;
x:=x+3; if x > y then goto beigas else goto sakums;
beigas:
end;

procedure FError;
begin
case MFErr of
1: writeln ('Lietotaajs neatlauj paarrakstiit esoso failu');
2: writeln ('Kluuda ievadot ierakstu skaitu veidojamajaa failaa');
3: writeln ('Neizdodas radiit failu');
4: writeln ('Nevar atveert pieprasiito failu');
else writeln ('Faila apstraades kluuda Nr:',MFErr);
end;
MFErr:= 0;
writeln ('Nospied taustinu');
readkey;
end;
begin
MFErr:= 0;
end.

2. dala:

program lab5;
uses L5;
var MDati: MFtips;
MaIer: MIer;
var nosaukums, vaards: string;
Oper: integer;
label Gadijums;
begin
gadijums:
if (MFErr <> 0) then FError;

writeln ('Ko dariisim?');
writeln ('1 - veidosim jaunu failu');
writeln ('2 - apskatiisim faila saturu');
writeln ('3 - iespraudiisim failu failaa');
writeln ('4 - beigt darbu');
readln (Oper);
case (Oper) of
1: begin
writeln ('Ievadi faila vaardu');
read;
readln (nosaukums);
FCreate (MDati, nosaukums);
end;

2: begin
writeln ('Ievadi faila nosaukumu kuru veelies apskatiit');
readln (nosaukums);
FView (MDati, nosaukums);
end;

3: begin
writeln ('Ievadi faila nosaukumu kuru spraudiisim');
readln (nosaukums);
writeln ('Ievadi faila nosaukumu kuraa spraudiisim');
readln (vaards);
FSpra (MDati, nosaukums, vaards);
end;

4: begin
exit;
end;

end;
goto Gadijums;
end.

Komentāri:

#1 WildGun @ 2010.05.26 07:52

Pirmais iespaids - nu i palags....
Otrais - teksta formatējums drausmīgs, pareizāk sakot - tā nav....
Trešais - kā ieraudzīju pirmo GOTO, tā iespaidi izbeidzās.

Ja gribi sagaidīt palīdzību, pievērs šīm lietām uzmanību, sevišķi otrajai. Šitā veči nedara.....

#2 Eric @ 2010.05.26 07:59

tas kods ir baigais mudzeklis,
Apraksti ar vārdiem, ko tu mēģini darīt FSpra procedūrā

#3 karuuzo @ 2010.05.26 10:51

Man jau pirmais iespaids beidzās pie label Taisit :) Pareizāk sakot, vēlēšanās iedziļināties. Tīri uz pirkstiem, failu failā iespraust nevar pēc definīcijas, jo failam ir tikai 3 operācijas (neskaitot atvēršanu/aizvēršanu un tamlīdzīgas darbības):
1. lasīt;
2. rakstīt;
3. pāriet uz pozīciju.
Tāpēc tavu bēdu var risināt divos veidos:
1) Taisam 3. failu, lasām no pirmā faila, rakstam 3. Kad atrodam pazīmi, to vēl ierakstām 3. failā, pēc tam veram vaļā 2. failu un visu ierakstam 3. failā. Kad tas izdarīts, turpinām rakstīt 1. failu 3. failā.
2) Atrodam 1. failā pazīmi, atceramies pozīciju un pārējo faila daļu pārrakstām starpbuferī (failā vai atmiņā), tad ejam uz 1. failā iegaumēto pozīciju, veram vaļā 2. failu un rakstām to pirmajā no atbilstošās pozīcijas. Kad 2. fails ierakstīts, ņemam 1. faila daļu, ko ierakstījām starpbuferī, un rakstam tālāk 1. failā.

Nobeigumā ieteikumi, aizmirsti, ka eksistē komanda GOTO, augsta līmeņa valodām tā ir ņirgāšanās par programmas stilu.
Koda postēšanai izmanto atbilstošu resursu, piem., www.codesend.com

m