PASCAL-problemy

Programovacie jazyky, rady, poradňa...
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

napis ako deklarujes premenne
A7X
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 431
Registrovaný: 20 júl 2008, 14:23

Príspevok od používateľa A7X »

prepac citim sa trapne ale ja som fakt VELIKANSKY LAIK...kebyze nerobim rocnikovu pracu tak to kaslem...
hadam pisem spravne:
program prijmacky;

Kód: Vybrať všetko

uses crt;
type osoba=record
     m,p,sk:string;
     bod,c,bpr:integer;
     prz6,prz7,prz8,prz9,cpr:real;
     end;
     juh=record
     ul,me,hod:string;
     cc,cd,pr1,pr2,pr3,bod:integer;
     end;
     pole=array[1..30] of osoba;
     lol=array[1..30] of juh;
var  a:pole;
     b:lol;
     pp:string;
     pom,max,L,k,r,i,n,j,o:integer;
     V,Q:char;
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

pom máš ako integer, nemôžeš do neho priradiť prvok typu osoba
A7X
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 431
Registrovaný: 20 júl 2008, 14:23

Príspevok od používateľa A7X »

hmm dakujem...potom pom ma ist do osoby do integeru vsak?
ale aj tak mi to pise na tej bodkociarke type mismatch
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

keď tam máš už taký chaos, jedna lokálna premenná typu osoba ho omnoho nezväčší a tebe to ulahčí prácu :) iba daj do tej procedúru var pom:osoba a nič nemusíš meniť
A7X
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 431
Registrovaný: 20 júl 2008, 14:23

Príspevok od používateľa A7X »

nechce zakladat dalsiu temu tak vyuzijem tuto:
ked mam pole a a pole b....triedim ich pomocou select sort...ako to mam spravit aby po triedeni to vse sedelo?
proste aby a[1].{nejake udaje}=b[1].{nejake udaje}....
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

1) keď to vôbec nesúvisi s pôvodonou témou tak radšej založ novú. Potom sa nečudujem že tu nikto nevie nič nájsť, keď v téme error 146 preberáme triediace algoritmy
2) čo aby sedelo? Buď máš dobrý algoritmus a utriedi ti to, alebo tam máš chybu a neutriedi. Neviem ale čo sa chceš spýtať
A7X
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 431
Registrovaný: 20 júl 2008, 14:23

Príspevok od používateľa A7X »

hmm..ja mam algoritmus:

Kód: Vybrať všetko

var pom:osoba;
          begin
          writeln('Utriedenie ziakov od najlepsieho ziaka(triedenie podla celkoveho poctu bodov)');
          L:=n;
          repeat
          max:=1;
          for i:=2 to n do if a[i].bod>a[max].bod then max:=i;
          pom:=a[L];
          a[L]:=a[max];
          a[max]:=pom;
          dec(L);
          until L=1;
no a ide oto ze to mi utriedy len pole A...v poli A mam napriklad meno priezvisko a jeho body za priklady
v poli B mam zase jeho kontaktne udaje..takze ako to mam utriedit aby to pasovalo??aby tie kontakten udaje patrili k tomu danemu ziakovi po utriedeni??
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

sprav to isté aj s druhým poľom:

Kód: Vybrať všetko

var pom:osoba;
          begin
          writeln('Utriedenie ziakov od najlepsieho ziaka(triedenie podla celkoveho poctu bodov)');
          L:=n;
          repeat
          max:=1;
          for i:=2 to n do if a[i].bod>a[max].bod then max:=i;
          pom:=a[L];
          a[L]:=a[max];
          a[max]:=pom;
          pom2:=b[L];
          b[L]:=b[max];
          b[max]:=pom2;
          dec(L);
          until L=1;
dal som tam pom2, lebo ak zrejme to máš inú štruktúru, a keby tam dáš pom tak zase vidíš tvoj oblúbený type mismatch :) Tak si pom2 deklaruj tak ako máš pole b. Neviem ale prečo si to nedal do jedného záznamu, ale rozbíjaš to na dve polia/súbory
A7X
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 431
Registrovaný: 20 júl 2008, 14:23

Príspevok od používateľa A7X »

btw:pom2 uz bude premenna zaznamu JUH(-zaznam B pola)?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

A7X napísal:btw:pom2 uz bude premenna zaznamu JUH(-zaznam B pola)?
ale veď som ti to napísal :) áno, bude
A7X
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 431
Registrovaný: 20 júl 2008, 14:23

Príspevok od používateľa A7X »

boze prepac..uz som fakt mimo ztoho celeho programovania...pardon ze som si to nevsimol..no musim to dat do dvoch poli,do dvoch zaznamov,lebo to tak mame v zadani-proste tak to mame urobit
alfaomega
Expert
Expert
Príspevky: 175
Registrovaný: 31 júl 2008, 17:12
Bydlisko: Martin/Brno

Re: PASCAL-problemy

Príspevok od používateľa alfaomega »

Zdravím mám taký problém alebo lepšie povedané že niečomu nechápem.
Zadanie príkladu je prevod čísla z 10-sústavy do 2.
Pri čísle napr. 110003 mi vyhodí záporné číslo.......?

Kód: Vybrať všetko

Program hmmm;
uses crt;
var v:integer;
p,c,e,x:real;
begin
clrscr;
e:=1;
x:=0;
writeln('Zadaj cislo v 10 sustave');
readln(v);
repeat
p:=v mod 2;
c:=e*p;
x:=x+c;
e:=e*10;
v:=v div 2;
until v=0;
writeln('........',x:16:0);
readln;
end.

Vopred ďakujem
picuge
Expert
Expert
Príspevky: 167
Registrovaný: 17 dec 2005, 20:38
Bydlisko: Bratislava/Martin

Re: PASCAL-problemy

Príspevok od používateľa picuge »

Zadane cislo nacitavas do integru, ktorý ma rozsah iba <-32766;32767>, takze ti pretecie premenna a bude v nej ulozena zla hodnota.
alfaomega
Expert
Expert
Príspevky: 175
Registrovaný: 31 júl 2008, 17:12
Bydlisko: Martin/Brno

Re: PASCAL-problemy

Príspevok od používateľa alfaomega »

picuge napísal:Zadane cislo nacitavas do integru, ktorý ma rozsah iba <-32766;32767>, takze ti pretecie premenna a bude v nej ulozena zla hodnota.
Jo funguje dal som tam longint ale aj tak som obmedzený vstupom - max 10 ciferné číslo. A do realu to asi nedám keď tam mám mod.
Ale funguje to lepšie než predtým takže dík.
94jakub
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2037
Registrovaný: 15 dec 2006, 13:18
Bydlisko: Martin/BA
Kontaktovať používateľa:

Re: PASCAL-problemy

Príspevok od používateľa 94jakub »

Skús ešte vyskúšať int64. Ten má 8 byte-ov (19 cif. číslo), to by malo stačiť.
Mám Free Pascal 2.4.0 a tam ide. Viem, že staršie verzie ho neberú.
To by to mohol ozrejmiť niekto skúsenejší.
Poprípade ešte vyskúšaj longword. Ten má len kladné čísla ale dvakrát väčší ako integer.
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: PASCAL-problemy

Príspevok od používateľa Gregi »

DOS Pascal v7.0 ma i typ "Longint" - -2147483648..2147483647. Delkaruj premennu ako tento typ a mal by byt problem vyrieseny.
94jakub
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2037
Registrovaný: 15 dec 2006, 13:18
Bydlisko: Martin/BA
Kontaktovať používateľa:

Re: PASCAL-problemy

Príspevok od používateľa 94jakub »

Keby si čítal pozornejšie, no offence :) tak by si sa dočítal, že longint už má a nestačí mu takže problém vyriešený nieje.
BTW int64 je -9223372036854775808 .. 9223372036854775807
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: PASCAL-problemy

Príspevok od používateľa Gregi »

94jakub napísal:Keby si čítal pozornejšie, no offence :) tak by si sa dočítal, že longint už má a nestačí mu takže problém vyriešený nieje.
BTW int64 je -9223372036854775808 .. 9223372036854775807
Ale ved pri Longint mu to pri zadani 110003 nemoze vyhodit zaporne cislo (pretecenie). Tam je problem kdesi v jeho programe.
co tak takto:

Kód: Vybrať všetko

Program DEC_to_BIN;
uses Crt;
var
  dec: Longint;
  bin: string;

BEGIN
  ClrScr;
  Write('DEC to BIN numero: ');
  ReadLn(dec);
  bin := '';
  repeat
    if (dec mod 2) = 0 then
      bin := '0' + bin
    else
      bin := '1' + bin;
    dec := dec div 2;
  until dec = 0;
  WriteLn(bin);
  ReadLn;

END.
alfaomega
Expert
Expert
Príspevky: 175
Registrovaný: 31 júl 2008, 17:12
Bydlisko: Martin/Brno

Re: PASCAL-problemy

Príspevok od používateľa alfaomega »

Fajn stiahol som novú verziu. Použil som int64 ale aj tak to pri väčších číslach hádže divné výsledky.
Ale ved pri Longint mu to pri zadani 110003 nemoze vyhodit zaporne cislo (pretecenie). Tam je problem kdesi v jeho programe.
co tak takto:
Btw Fakt keby si lepšie čítal, dočítal by si sa že pri spomínanom čísle 110003 mi to s longint už záporné číslo nahádzalo. Problém bol ak som do vstupu hodil 11 a viac cif. číslo.
Celkovo je ten môj program komplikovaný. Ten tvoj vyzerá lepšie, hneď zajtra to vyskúšam.

Vďaka všetkým za pomoc
Napísať odpoveď