Az interneten keresgéltem de nem találtam sajnos meg. Ezért írok nektek. Én nem értek ehhez a programozáshoz. De nekem volt egy olyan kis programom ami evvel a TP-all készült. Most szeretném mekérdezni ki tud benne segíteni ? Vagy meg csinálná ? Egy sima sorsoló programot szeretnék. Pl: A B C D és azt sorsolja össze pl A-t a D-vel B-t a C-vel // AD és BC PLs nagyonon fontos lenne!
Mielőtt továbblépnél, érdemes a programodat átalakítanod valami rendezettebb formába, az ilyen mindentegybe stílus később bosszút áll rajtad.
Szóval kell négy procedura, ahová szétpakolod a három fő feladatot, nevezetesen és nagyjából így:
beolvas(mit, mibe, hányat),
rendez(mit, az milyen tipus, milyen sorrendbe),
kiir(mit, hová),
vezérlő, amelyben bekéred a paramétereket, létrehozod a tömböt, és hívod a fenti hármat.
Aztán mindent double-ben deklarálj, integerbe nem tudsz tizedest beolvasni.
Továbbá kell egy ötödik proc, a számformázáshoz, amelyben tetszőleges paraméter a szám tabulálási elképzelése (pl. minden kiírt számban azonos helyen lesz a tizedespont) és a tizedesek száma.
Csemege, ha a számot a bekérésnél ellenőrzöd, hogy egyáltalán szám-e és benne van-e a double tartományában.
Elkészítettem a lenti programot annyiban, hogy megadjuk a tetszőleges méretű tömb elemeinek számát és kiírja fordított sorrendben. Ez működik szépen. Viszont annyiban kérném a segítségeteket, hogy a bekért integer típusú elemeket double-ra, vagy int-ben maradva úgy, hogy 4 tizedesjegyre alakítsa a számokat sorba rendezve.
FELADAT:
A bemenet elsõ sorában található egy egész szám, n. Ezután következik tetszõlegesen sok, de maximum kétszáz darab, int vagy double típusú szám. Írjuk õket növekvõ nagyság szerint rendezve a kimenetre 3 tizedesjegy pontossággal. pl.:
Bemenet: 4 10 10.5 6.8 11.2275
Kimenet: 4.0000 6.8000 10.0000 10.5000 11.2275
Program rendez; Uses Crt;
const MaxElem=200; Var a:array [1..200] of integer; i,j,kisebb:integer; adat,t:INTEGER; max:longint;
Begin ClrScr; begin repeat
writeln('Add meg a tömb elemeinek a számát! (2<n<200)'); readln(t); writeln; if ((t>200) or (t<2)) then begin writeln('A megadott ertek nem megfelelo.'); writeln('A folytatashoz nyomjon Enter-t.'); readln; end; until ((t<201) and (t>2)); end;
Writeln('TOMB'); For i:=1 to t do Begin Writeln('Kerem a tomb ',i,'. elemet: '); Readln(a[i]); End; WRITELN; Writeln('A TOMB ELEMEI A KOVETKEZOK: '); For i:=1 to t do Begin Writeln(a[i]); End; WRITELN; Writeln('A TOMB ELEMEI -CSOKKENOBEN- RENDEZVE A KOVETKEZOK: '); For i:=1 to t do For j:=1 to t do If a[i]>a[j] then Begin kisebb:=a[i]; a[i]:=a[j]; a[j]:=kisebb; End; For i:=1 to t do Begin Writeln(a[i]:6); End; Readln; END.
Üdv mindenkinek! A következő program megírásában kérném a segítségeteket. Pascal-ban. Esetleg nincs meg valakinek, szívesen venném!!!! (honorálnám is!) Köszi előre is!
A bemenet első sorában található egy egész szám, n. Ezután következik tetszőlegesen sok, de maximum kétszáz darab, int vagy double típusú szám. Írjuk őket növekvő nagyság szerint rendezve a kimenetre n tizedesjegy pontossággal.
ha csak a 10! permutációt nézed végig, az valóban 1-2 másodperc átlagos gépnek. De ha mind a 1E10 esetet megnézed az vagy 2700-szor több idő, azaz inkább órás nagyságrend.
Igazából meglepően hatékony véletlenszámos módszer, nekem átlag 10-15 másodperc alatt megtalált egyet a nyolc megoldásból, azaz csak 10-szer lassabb, mint a "tisztességes" program.
azért erre kár programot írni, 10 perc alatt kitalálható (jó, persze, akkor hol van a programozás öröme?):
3247+6859, és az összes olyan permutáció, ahol R-Y, E-O valamint A-U csere van.
(egyébként szerintem a randomize-t kéne kihagyni a programodból, ugyanis minden ciklusban ugyanonnan indul a véletlenszám generátor, így folyton ugyanazt a kombinációt fogja adni. Eleve ez a véletlenszám-dolog a pascalban valahogy nagyon el van tolva...)
A feladat szerintem már hibás, mivel 10 féle betűt látok, ezért a számjegyek: 0-tól 9-ig lehetnek. Nem csoda, ha végtelen ciklust írtál valahol. De ebből le lehet vonni némi következtetést. (pl. G, T, D nem lehet 0) És célszerűbb lenne egy 10 elemű tömbbel dolgozni, amiben folyamatosan cserélgeted a számjegyeket és nem pedig véletlenszerűen sorsolgatsz.
1-2 hónapja tanulok pascalt, és egy matematika feladat megoldásához szerettem volna felhasználni. A feladat a következő:
Mi a betűk értéke, ha GREA + TYOU = DIDIT?(Az egyforma betűk egyforma számokat jelölnek, különböző betűk nem jelölheti ugynazt a számot, minden betű 1-9-ig egy egészet jelöl)
Az általam írt program:
program rankk;
uses crt;
var
G:integer;
R:integer;
E:integer;
A:integer;
T:integer; Y:integer;
O:integer;
U:integer; D:integer;
I:integer;
begin
clrscr;
Repeat
Randomize;
G:= Random(9)+1;
r:= Random(9)+1;
while(r=G) do
begin
r:=Random(9)+1;
end;
e:= Random(9)+1;
while(e=G) or (e=r) do
begin
e:=Random(9)+1;
end;
a:= Random(9)+1;
while(a=G) or (a=r) or (a=e) do
begin
a:=Random(9)+1;
end;
t:= Random(9)+1;
while(t=G) or (t=r) or (t=e) or (t=a) do
begin
t:=Random(9)+1;
end;
Y:= Random(9)+1;
while(y=G) or (y=r) or (y=e) or (y=a) or (y=t) do
begin
y:=Random(9)+1;
end;
O:= Random(9)+1;
while(o=G) or (o=r) or (o=e) or (o=a) or (o=y) or (o=t) do
begin
o:=Random(9)+1;
end;
U:= Random(9)+1;
while(U=G) or (U=r) or (U=e) or (U=a) or (u=t) or (u=y) or (u=o) do
begin
U:=Random(9)+1;
end;
D:= Random(9)+1;
while(d=G) or (d=r) or (d=e) or (d=a) or (d=t) or (d=y) or (d=o) or (d=u) do
begin
d:=Random(9)+1;
end;
I:= Random(9)+1;
while(I=G) or (I=r) or (I=e) or (I=a) or (I=t) or (I=y) or (I=o) or (I=u) or (I=d) do
A program tehát minden betűnek sorsol egy értéket 1-től 9-ig, ha az nem egyenlő egy már meglévő betűvel, egészen addig amíg az összeg igaz nem lesz. Ekkor kiírja a betűk értékét.
A program indításakor azonban semmi nem történik, hibát a fordító nem jelzett.
Ha hibát ad, akkor valószínűleg 0-255 közötti, de ezt a ctrl F1 megmondja, vagy kipróbálhatod, hogy 200-ra ad-e hibát. Mivel akárhányszor adhatnak hibás számot, nyilván egy ciklusra lesz szükséged, nem egy egyszeri elágazásra. Célszerűen egy repeat..until hátultesztelő ciklusra, ami legalább egyszer lefut. De olyat is szoktak csinálni, hogy kiemelik az első adatbevitelt, hogy más lehessen a szöveg, és akkor utána elöltesztelő while ciklus.
köszi, így működik (bár negatív szám beírásakor kiakad egy hibaüzivel), már csak azt kell megoldonom, hogy a hibás érdemjegy helyetti másik jegy beolvasásakor ismételten vizsgálja meg a progi, hogy a javított érdemjegy is megfelel-e a feltételnek
És úgy is emlékszem, hogy a byte negatív is lehet, de ezt megmondja neked, ha a byte szó közepére állva ctrl F1-et nyomsz. És akkor if (i<=0) or... lesz. Persze ezzel a típussal sose olvasol be egy négyötödös jegyet. :-)
Most ismerkedem a pascal nyelvvel, s elakadtam az egyik feladatnál. Egy érdemjegy bekérésénél azt kell megvizsgálnom, hogy a beírt érdemjegy 1 és 5 közé esik-e. Ha nem akkor kérje be mégegyszer a jegyet. Én ezt így akartam megoldani:
program jegy; var i:byte;
begin write('Add meg az érdemjegyet:'); readln(i); if i=0 or i>=6 then begin write('Hibás érdemjegy, add meg újra:'); readln(i); end; readln; end.
De erre a megoldásra minig hibaüzenetet kapok, miszerint az if i=0 kifejezés inkompatibilis a byte típussal, csak azt nem értem, hogy miért, hisz a byte típusú változó értéke 0-255 terjed, így akár 0 is lehet. Rosszul tudom??