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
 11/35 A kérdező kommentje:

Még egyszer nagyon köszönöm, de sajnos az a helyzet, h nekem egy olyan feladathoz kellene egy fv, ahol nem ismerjük a keresendő karaktereket (m felhasználó adja meg).


Azt hittem, h ha ennyire leegyszerűsítem a problémát, akkor gyorsabban jutok jó megoldáshoz, de sajnos a fv-eiteket nem tudom használni.


Tehát esetleg lenne kedvetek kitalálni egy olyan megoldást, ahol nem ismerjük a karaktereket?


Tehát az előző elemhez hasonlítgatás azért nem jó, m nem tudjuk, h a keresett kifejezés sos vagy soos, s míg az elsőnél arra kell figyelni, h ne legyen több o, a másodiknál már arra, h csak két o legyen.


Van esetleg ötletetek arra, h hogyan lehet megoldani, h a program mindig el tudja dönteni, h éppen milyen kitételre van szükség?

2015. máj. 10. 21:14
 12/35 A kérdező kommentje:

Inkább leírom a teljes feladatot:


Titkosírás: egy elfogott kém úgy üzeni meg megbízóinak fogva tartója nevét, hogy a név karaktereit szétszórja egy semleges szövegsor karakterei között. A megbízó végigfuttatja a gyanúsítottak neveit a kém egysoros üzenetén és pontosan egy név lesz, amelynek a karakterei a megfelelő sorrendben szerepelnek a szövegsorban. Melyik ez a név?

feladat vége


Amikor meg kell oldanom a feladatot, akkor kapok majd egy ismeretlen szövegsort és egy ismeretlen névlistát. És egy futtatásból meg kell majd mondanom a fogva tartó nevét. Ha nincs időtök megírni a forráskódot, akkor ötleteknek is nagyon örülnék, m már kifogytam belőlük.

2015. máj. 10. 21:28
 13/35 SimkoL ***** válasza:
Ezzel kellet volna kezdeni :) Remélem nem holnapra kell ?
2015. máj. 10. 21:36
Hasznos számodra ez a válasz?
 14/35 tabaki ***** válasza:

@SimkoL: Most aztán elemedben vagy, mi?


@Kérdező: Hát, így azért eléggé más a leányzó fekvése... Jó kis izgalmas feladat, de hogy mit tudok vele kezdeni?

2015. máj. 10. 21:50
Hasznos számodra ez a válasz?
 15/35 SimkoL ***** válasza:
Az elmúlt pár napban sokan kerestek meg Pascal és Delphi gondokkal privátban. Most benne vagyok valóban :)
2015. máj. 10. 21:54
Hasznos számodra ez a válasz?
 16/35 tabaki ***** válasza:

A desifrírozásra gondoltam... :)

Ékezetes betűk is játszanak?

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

Na jó, én lefekszem, holnap korán kezdek.

Pedig már látom a fényt az alagút végén...

2015. máj. 10. 22:26
Hasznos számodra ez a válasz?
 18/35 SimkoL ***** válasza:
Az a mozdony :)
2015. máj. 10. 22:30
Hasznos számodra ez a válasz?
 19/35 tabaki ***** válasza:

:)

Jóccakát!

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

program project1;


{$mode objfpc}


uses Classes, SysUtils;


var s : TStringList;

i : integer;


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

var i, n : byte;

temp : string;

halmaz : set of char;

begin

temp := '';

halmaz := [];

myFound := False;

subchar := UpperCase(subchar);

s := UpperCase(s);

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];

for n := 1 to Length(subchar) do while (temp[n] <> subchar[n]) and (Length(temp) > Length(subchar)) do Delete(temp, n, 1);

SetLength(temp, Length(subchar));

myFound := temp = subchar;

end;


begin

s := TStringList.Create;

try

s.LoadFromFile('stringek.txt');

for i := 0 to s.Count -1 do if myFound(s.Strings[i], 'Ez lesz majd a teszt szöveged a vizsgán, de ha minden más is lehet :)') then WriteLn(s.Strings[i]);

finally

s.free;

end;

ReadLn;

end.


stringek.txt:

Toth

Beregi

Somlo

Pesti

Vasas

Simko

Balatoni

Korhely

Kaposi

2015. máj. 10. 23:14
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!