Kezdőoldal » Számítástechnika » Programozás » Pascal hiba? Se'gítsete'k...

Pascal hiba? Se'gítsete'k Vuknak, a kis rókának (valamit még írnom k'ellett, m rövid volt a kérdés)

Figyelt kérdés

A feladatom egy fájlban szereplő string adatokból kiválasztani azokat, amelyekben a "s,o,s" betűk mindegyike, ilyen sorrendben megtalálható.A problémám az, hogy hogyan fejezem ki a két s egymásutániságát.


Itt van az erre vonatkozó megoldásom, de nem működik. Van valakinek jobb ötlete? Esetleg valaki ki tudj bogarászni, h miért nem működik az enyém?


For i:=1 to db do begin

if (pos('s',t[i].c)>0) and (pos('s',t[i].c)<pos('o',t[i].c)<

(pos('s',(delete(t[i].c,1,pos('s',t[i].c))))+length(pos('s',t[i].c))) then begin

writeln(t[i].c);

end;

end;


az volt az ötlet, h a második s-nél kitörlöm először a az első s-ig tartó szakaszt, aztán onnan kiszámolom hányadik a második s, aztán hozzáadom a kivont értéket, h a nagyságrend megmaradjon.



2015. máj. 10. 09:03
1 2 3 4
 1/35 tabaki ***** válasza:

Fogalmam sincs, mi a baj a kódoddal, igaz, annyira szörnyű látvány, hogy eszembe se jutott belenézni.

Bizonyára van fifikásabb módja is, de én a magam részéről a string karaktereit sorban megvizsgálnám, és ha 's' vagy 'o', akkor átmásolnám egy másik stringbe. A végén pedig megnézném, hogy az új string tartalmazza-e a 'sos'-t.

2015. máj. 10. 13:18
Hasznos számodra ez a válasz?
 2/35 SimkoL ***** válasza:

tabaki kolléga elképzelése nagyon jó, írtam rá egy függvényt hátha kell még valakinek:


function myFound(subchar, s : string) : boolean;

var i : byte;

temp : string;

halmaz : set of char;

begin

temp := '';

halmaz := [];

myFound := False;

for i := 1 to Length(subchar) do if not (subchar[i] in halmaz) then halmaz := halmaz + [subchar[i]];

for i := 1 to Length(s) do if s[i] in halmaz then temp := temp + s[i];

myFound := Pos(subchar, temp) <> 0;

end;

2015. máj. 10. 17:01
Hasznos számodra ez a válasz?
 3/35 tabaki ***** válasza:

@SimkoL:

Mmm, ez tetszik. Nekem persze nem is jutott eszembe ilyen szépen általánosítani a feladatot. De azért utólag közlöm az én próbálkozásomat is, hátha első blikkre érthetőbb.


Kérdező, a kérdésedből nem derült ki, hogy miért olvastad rekord-tömbbe az adatokat, ezt a részét én elhagytam. Itt a programom:


program soskereso_00;


var

sor : string;

fajl : text;


function Van_sos(szoveg : string) : boolean;

var

i : byte;

seged : string;

begin

           seged := '';

           for i := 1 to Length(szoveg) do

                       if szoveg[i] in ['o','s'] then seged := seged+szoveg[i];

           if Pos('sos', seged)>0 then Van_sos := True else Van_sos := False;

end;


BEGIN

           Assign(fajl, 'stringek.txt');

           {$I-} Reset(fajl); {$I+}

           if IOResult=0 then

                       while not Eof(fajl) do

                                   begin

                                   ReadLn(fajl, sor);

                                   if Van_sos(sor) then WriteLn(sor);

                                   end

           else begin

                       WriteLn('Nem talalom a STRINGEK.TXT fajlt!');

           end;

           ReadLn;

END.


A stringek.txt nálam Weöres Sándor Ócska Sírversek ciklusát tartalmazza:

[link]

A futtatás eredménye:

Bajusz Balázs voltam, ez a tény és való,

s nem sujt agyon senkit ílyen rossz barátság.

mindig szűz volt szegény pára,

Bábota Szilveszter, kustánszegi oskolamester,

Ime sírja Bakos Vincének,

Mit bánod már, hogy sohasem szívleltek a lányok,

Frászkarikán szánkáz kutyafarka varangyos a banda

2015. máj. 10. 19:35
Hasznos számodra ez a válasz?
 4/35 A kérdező kommentje:

SimkoLét értem, tetszik, köszönöm.


Tabaki! Ha a karakterek pl. s,o,o,s sorrendben vannak, akkor a seged-be is így kerül majd bele, ezért a pos nem tudja majd értelmezni, pedig az s,o,s benne van. Vagy tévedek?

2015. máj. 10. 20:02
 5/35 SimkoL ***** válasza:
Akkor a kérdés feltevésed nem volt egyértelmű mivel azt lehetett kikövetkeztetni belőle, hogy a két s között csak egyetlen o lehet.
2015. máj. 10. 20:12
Hasznos számodra ez a válasz?
 6/35 tabaki ***** válasza:
Szerintem értelmezés kérdése, hogy a több 'o' elrontja-e. Ha úgy ítéled, hogy nem, akkor a Pos() nyilván alkalmatlan a vizsgálatra, legalábbis kellő előkészítés nélkül. Ha jól értem, ebben az esetben SimkoL megoldása sem megfelelő. De nem tűnik bonyolultnak a probléma, valószínűleg elég annyi, hogy a segédstringbe csak akkor írd be a karaktert, ha az nem azonos a legutóbbival.
2015. máj. 10. 20:19
Hasznos számodra ez a válasz?
 7/35 A kérdező kommentje:

Bocsi, akkor az én hibám volt....


Még egyszer köszönöm, sokat segítettetek mindketten:)

2015. máj. 10. 20:29
 8/35 tabaki ***** válasza:

Ilyesmire gondolok:


//tabaki:

function Van_sos(szoveg : string) : boolean;

var

i : byte;

seged : string;

begin

           seged := '';

           for i := 1 to Length(szoveg) do

                       if szoveg[i] in ['o','s'] then

                                   if seged[Length(seged)] <> szoveg[i] then seged := seged+szoveg[i];

           if Pos('sos', seged)>0 then Van_sos := True else Van_sos := False;

end;


//SimkoL:

function myFound(subchar, s : string) : boolean;

var i : byte;

temp : string;

halmaz : set of char;

begin

           temp := '';

           halmaz := [];

           myFound := False;

           for i := 1 to Length(subchar) do if not (subchar[i] in halmaz) then halmaz := halmaz + [subchar[i]];

           for i := 1 to Length(s) do if s[i] in halmaz then

                       if temp[Length(temp)] <> s[i] then temp := temp + s[i];

           myFound := Pos(subchar, temp) <> 0;

end;

2015. máj. 10. 20:40
Hasznos számodra ez a válasz?
 9/35 SimkoL ***** válasza:

Vagy pedig megkeressük a stringben az első és utolsó s-t és ha 'szorult' közéjük legalább egy o akkor rendben.


program Project1;


uses strutils;


var s: string;

first, last : byte;


begin

s := 'zsíroskenyér';

first := Pos('s', s);

last := Length(s) + 1 - Pos('s', ReverseString(s));

WriteLn(first, ' ', last, ' ', Pos('o', s));

if (Pos('o', s) > first) and (Pos('o', s) < last) then WriteLn(s);

ReadLn;

end.

2015. máj. 10. 20:52
Hasznos számodra ez a válasz?
 10/35 tabaki ***** válasza:

@SimkoL:

!!!

:D

2015. máj. 10. 21:01
Hasznos számodra ez a válasz?
1 2 3 4

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!