Datuve :: Forums :: Arhīvs :: Programmēšana Pascal

Datuve

Mana Datuve

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



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 123

Reģistrētie lietotāji online: 0

Viesi online: 123

Datuve.lv video
Top.LV

Programmēšana Pascal

Ievietoja: Ingrid @ 2008.09.24 14:30  

Varbūt kāds var palīdzēt un parādīt, kas te ir nepareizi? Jāsastāda programma, kurā ir procedūra, kas ar ievietošanas metodi sakārto masīvu augošā secībā.

program ieviet;
uses crt;
var M: array [1..20] of integer;
var GAR, I, J: 1..20;
procedure ievietosana
(var M: array of integer; GAR: integer);
var I,J: 1..20;
C:"integer;
begin
M[GAR+1]:=maxint;
for I:=GAR-1 downto 1 do
begin
C:=M[I];
J:=I+1;
while M[J],C do
begin
M[J-1]:=M[J];
J:=J+1;
end;
M[J-1]:=C;
end;
begin
clrscr;
randomize;
for I:=1 to 20 do M[I]:= Random (20);
writeln ('Masivs M ir: ');
for I:=1 to 20 do write (M[I]:3);
ievietosana (M,M[I]);
writeln ('Masivs augosa seciba:');
write (M[C]:3);
end;
end;
end.

Komentāri:

#1 ob1 @ 2008.09.24 14:43

Kļūda ir tavā DNA. :D

Ja nopietni, tad mazliet esmu piemirsis Pascal sintaksi, bet
1) rindiņā: M[GAR+1]:=maxint; maxint nav definēts.
2) ievietosana (M,M[I]); - i nav definēts.
3) write (M[C]:3); - C nav definēts.

tiec galā ar mainīgo definēšanu, ja tad neies, varu palīdzēt ar algoritmu.

#2 mefisto @ 2008.09.24 14:44

Kā to 'ievietošanas metodi' sauc angliski ?
Anyway .. kods izskatās kā būtu kaut kur nokompēt , bez jebkādas nojēgas .

#3 ob1 @ 2008.09.24 14:45

insertion sort, pašvaks algoritms, bet reizēm noder.

#4 Ingrid @ 2008.09.24 14:51

Skaidrs, ka šitas ir nokopēts - no Viestura Vēža materiāliem - neklātienē mācos, nav ar ko pakonsultēties, jāmēģina pašai izprast, kas un kā un kur jāraksta. Viņam gan tur materiāli fragmentāri, pagrūti saprast. Pamēģināšu nodefinēt maxint un i, varbūt aizies...

#5 ob1 @ 2008.09.24 14:54

tik vienkārši gan neaizies. :) tur vēl ir daži fundamentāli bugi.
Lai uzrakstītu progu ir jādomā, bakstoties tikai laiku patērēsi, bet neko neiegūsi.

#6 kaaposc @ 2008.09.24 14:56

#4, varbūt arī neaizies, jo:

M[GAR+1]:=maxint;

gadījumā, ja cikls kā pēdējo iterāciju paņems 20, tad M[20+1] būs ārpus masīva robežām.

#7 Ingrid @ 2008.09.24 15:00

Ko ar to progu grib panākt, es saprotu, arī lielāko daļu pašas programmas saprotu, bet dažas rindiņas gan neizprotu... :( Nodefinēju visus mainīgos kā integer, kompilējot rāda pie pēdējā end., ka Begin expected.

#8 ob1 @ 2008.09.24 15:03

vai nu viens begin pietrūkst, vai nu viens end ir par daudz :)

Ja dažas rindiņas nesaproti, tad nesanāks. Vai nu prasi konkrēti, vai nu lasi dokumentāciju.

#9 kaaposc @ 2008.09.24 15:05

hmm.. #6 neņemt īpaši vērā, nepareizi sapratu kodu :P

#7, kuras rindiņas tieši nesaproti? un izskatās, ka beigās ir viens lieks "end;"
pareizāk sakot - izskatās, ka procedūras ķermeni noslēdzošais "end;" ir pārāk zemu :)

#10 ob1 @ 2008.09.24 15:08

drīzāk gan trūkst begin rindā "for I:=1 to 20 do write (M[I]:3);", tiesa tad tur sanāks baigais sviests ar "ievietosana (M,M[I]);".

#11 Ingrid @ 2008.09.24 15:08

kaaposc rakstīja:

hmm.. #6 neņemt īpaši vērā, nepareizi sapratu kodu :P

#7, kuras rindiņas tieši nesaproti? un izskatās, ka beigās ir viens lieks "end;"
pareizāk sakot - izskatās, ka procedūras ķermeni noslēdzošais "end;" ir pārāk zemu :)

Pašu procedūras ķermeni ne īpaši labi izpratu. Ahā, pameklēšu, kur tieši tam vienam end; ir jābūt procedūras ķermeņa beigās...

#12 kaaposc @ 2008.09.24 15:14

es piedāvāju visu padarīšanu pārrakstīt par jaunu (un citā valodā, ja drīkst)...

#13 ob1 @ 2008.09.24 15:15

algoritmu var paskatīties šeit: http://en.wikipedia.org/wiki/Insertion_sort
tur ir arī pseidokods. Atliek pārtulkot uz Pascal un pielikt izsaucošo procedūru.

#14 Ingrid @ 2008.09.24 16:53

kaaposc rakstīja:

es piedāvāju visu padarīšanu pārrakstīt par jaunu (un citā valodā, ja drīkst)...

Nedrīkst citā, man tieši Pascal jāmācās... Pārbaudīju un atradu, kur jābūt end procedūras beigās, tagad proga strādā, tikai nesakārto masīvu augošā secībā. Jāpaskatās ob1 ieteikto saiti, varbūt izkodīšu, kur vēl kļūda.

#15 Johans2 @ 2008.09.24 17:03

C:"integer; - kljuuda

#16 ob1 @ 2008.09.24 17:05

atsūti progas tekstu (izlaboto)

#17 Ingrid @ 2008.09.24 17:15

Johans2 rakstīja:

C:"integer; - kljuuda

Jā, programmā tā nav, vienkārši pārrakstījos :)

Tagad teksts ir šāds:
program ieviet;
uses crt;

var M: array [1..20] of integer;
var GAR, I, J, C, maxint: integer;

procedure ievietosana(var M: array of integer; GAR: integer; I,J,C,maxint: integer);
     begin
       M[GAR+1]:=maxint;
       for I:=GAR-1 downto 1 do
       begin
           C:=M[I];
           J:=I+1;
           while M[J]<C do
           begin
               M[J-1]:=M[J];
               J:=J+1;
           end;
           M[J-1]:=C;
       end;
end;

       begin
           clrscr;
           randomize;
           for I:=1 to 20 do M[I]:= Random (20);
           writeln ('Masivs M ir: ');
           for I:=1 to 20 do write (M[I]:3);
           ievietosana (M,M[I],M[J],GAR,M[C],C);
           writeln ('Masivs augosa seciba:');
           for C:=1 to 20 do write (M[C]:3);
       readln;
   end.

#18 ob1 @ 2008.09.24 17:35

1) kāpēc funkcijai ievietosana tik daudz parametru? vajag mazāk.
2) ievietosana (M,M[I],M[J],GAR,M[C],C); - tajā vietā mainīgiem I, J, GAR, C nav piešķirtas vērtības, tādējādi arī M[C] ir nedefinēts

#19 Ingrid @ 2008.09.24 17:49

Ingrid rakstīja:

Mazliet palaboju:
program ieviet;
uses crt;

var M: array [1..20] of integer;
var GAR, I, J, C, maxint: integer;

procedure ievietosana(var M: array of integer; GAR: integer);
var I,J,C,maxint: integer;
     begin
       M[GAR+1]:=maxint;
       for I:=GAR-1 downto 1 do
       begin
           C:=M[I];
           J:=I+1;
           while M[J]<C do
           begin
               M[J-1]:=M[J];
               J:=J+1;
           end;
           M[J-1]:=C;
       end;
end;

       begin
           clrscr;
           randomize;
           for I:=1 to 20 do M[I]:= Random (20);
           writeln ('Masivs M ir: ');
           for I:=1 to 20 do write (M[I]:3);
           ievietosana (M,M[I]);
           writeln ('Masivs augosa seciba:');
           for C:=1 to 20 do write (M[C]:3);
       readln;
   end.
[/quote]

#20 ob1 @ 2008.09.24 17:52

ievietosana (M,M[I]); - loģiski būtu (M, 20) vai ne?
M[GAR+1]:=maxint; - kļūda. vai tā rindiņa vispār ir vajadzīga?

#21 Ingrid @ 2008.09.24 18:02

ob1 rakstīja:

ievietosana (M,M[I]); - loģiski būtu (M, 20) vai ne?

:) :) :) Jā, tiešām, tagad sakārto kā vajag, izņemot 1. skaitli masīvā... Varbūt šeit arī kļūda: for C:=1 to 20 do write (M[C]:3); ?

ob1 rakstīja:

M[GAR+1]:=maxint; - kļūda. vai tā rindiņa vispār ir vajadzīga?

Nezinu, vai viņu vajag, VVR materiālā bija šī rinda... Pamēģināšu to izņemt...

#22 ob1 @ 2008.09.24 18:12

ahā, laikam sāku saprast, tas M[GAR+1] vajadzīgs, jo programmētājs bija par slinku taisīt vēl vienu pārbaudi. Tiesa tajā gadījumā masīvu M vajag taisīt par 1 elementu lielāku - [1:21].

#23 Ingrid @ 2008.09.24 18:14

ob1 rakstīja:

M[GAR+1]:=maxint; - kļūda. vai tā rindiņa vispār ir vajadzīga?

Rindiņu izņēmu, tiešām nebija vajadzīga. Pirmais cipars 2. masīvā tāpat ir tāds pat kāds 1. masīvā, pārējie sakārtoti augošā secībā kā vajag. :)

OK, ierakstīšu to rindiņu atpakaļ un izmainīšu masīva lielumu :)

#24 ob1 @ 2008.09.24 18:22

skat #22. ja tās rindas nav, tad vajag papildus pārbaudi uz masīva beigām.

Paliek mazliet skumji domājot par to, ka Ingrid izmācīsies nesaprotot programmēšanu, pēc gadiem 10 būs uzkalpojies(-usies) puslīdz augstā amatā, tad es kā analītiķis iešu pie viņa(-as) noskaidrot ko vajag programmēt, un viņš(-a) nemācēs sakarīgi paskaidrot, jo tā arī neiemācījās programmēšanu. :(

#25 BernuBieds @ 2008.09.24 18:27

Man domāt, ka viņš(-a) mācās par informātikas skolotāju..

#26 Ingrid @ 2008.09.24 18:28

:) Nē, es programmēšanu darbā neizmantošu, un tādā darbā, kur analītiķiem kaut kas jāskaidro, es nestrādāšu - es pamatskolā strādāju :) , man vienkārši studiju programmā ir paredzēts to mācīties, tā ka jātiek kaut kā galā ar to...

BernuBieds rakstīja:

Man domāt, ka viņš(-a) mācās par informātikas skolotāju..

Nē, par matemātikas...

#27 ob1 @ 2008.09.24 18:34

jā, matemātikas skolotājs, kas nezina matemātiku. Sortēšana ir algoritmu teorijas daļa, kas savukārt ir matemātikas daļa. Skumji. :(

Matemātikas skolotāj, vai vari atrisināt 8. klases teksta uzdevumu:
1.5 vistas 1.5 dienās izdēj 1.5 olas. Cik izdēs 9 vistas 9 dienās?

#28 Ingrid @ 2008.09.24 18:35

Nu, centīšos iemācīšos, es vēl tikai sāku...

#29 ob1 @ 2008.09.24 18:36

nu tad cik olas?

#30 KaNeiet @ 2008.09.24 18:38

#27 nav jau tik traki - te tak cilvēks mācas vai vismaz cenšas to darīt, bez tam reti kurš matemātiķis labi orientējas gan, piemēram topoloģijā, gan skaitliskajās metodēs.

#31 Ingrid @ 2008.09.24 18:41

54 olas

Vēl neesmu mācījusies ne topoloģiju, ne skaitliskās metodes, tas man vēl priekšā.

#32 ob1 @ 2008.09.24 18:41

Matemātiķis orientējās, varbūt nezin sīkumus, bet pārzin galvenās nozares. Tas tāpat kā programmēšanā - džeki iemācās rakstīt sīkas progas pāris valodās un uzskata sevi par programmētājiem.

Tad cik būs tās olas, kāds var atrisināt?

#33 Ingrid @ 2008.09.24 18:43

54 olas

#34 ob1 @ 2008.09.24 18:45

nu labi, labi. Vismaz 8. klases vielu esi apguvis(-usi). :)

#35 BernuBieds @ 2008.09.24 18:51

Jau ieprieš atvainojos par offtopicu!

ob1 - cik sver ķieģelis, ja ķieģelis sver kilogramu un vēl pusķieģeli!

#36 ob1 @ 2008.09.24 18:55

2kg

#37 BernuBieds @ 2008.09.24 19:01

Ir, ir pareizi.

#38 ob1 @ 2008.09.24 19:02

Esmu matemātiķis kā nekā. :D