Kezdőoldal » Számítástechnika » Programozás » Hogy lehetséges ezt a programo...

Hogy lehetséges ezt a programozási feladatot megoldani?

Figyelt kérdés

Azt szeretném megoldani,ha nem túl komplikált,hogy az egész beírómezőben,bármilyen műveleti jelet írnak, sor előtt, sor(ok) után, szám(ok) előtt, szám(ok) után, akkor elvégezze a feladatot, tehát,hogyha beírom, pl:


12+23-4/6*8+12/7777+55-777*9999, akkor végezze el ezt a bonyolult műveletet és erről egy másik beírómezőben adjon pontos végeredményt. Nagyon sok időt rászántam, hogy megtaláljam a megoldást, mindenre jutottam, csak vagy az

eredményt nem tudtam kihozni, vagy a program nem működött megfelelően. Próbálkoztam a seltextet bevonni,a gettextlent, a sellengthet, másik ciklust, ami a -1-et helyettesíti be, akár e j változóba, kivonni, tömbök alá venni az edit1.text-et[edit1.selstart]-tal, kivonni, osztani szorozni, mindenféle kombinációt, kicserélni az edit1.texteket, edit1.seltextekre, de nem sikerült a feladatot megoldanom normális működő módon. Ebben szeretnék segítséget kérni, ha lehet természetesen forráskóddal mellékelve, mert úgy vélem, hogy ez annál komplikáltabb dolog lehet, hogy szóban megértsem, mit hogyan kell tennem, vagy milyen további, esetleges függvényeket kell, hogy bevonjak a programba, amivel ezt működőképessé lehet varázsolni. Előre is köszönök, minden segítséget és megoldást.



unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,Strutils, ExtCtrls;


type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

procedure Edit1Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.Edit1Change(Sender: TObject);

var sign:char;

i,w:integer;

begin

try



For i:=1 to length(edit1.Text) do

If not (edit1.Text[i] in ['0'..'9']) then

Begin

sign:=edit1.Text[i];

w:=i;

End;



Case sign of

'*': edit2.Text:= floattostr(strtofloat(LeftStr(edit1.Text,w-1)) * strtofloat(rightstr(edit1.Text,length(edit1.Text)-w)));

'/': edit2.Text:= floattostr(strtofloat(LeftStr(edit1.Text,w-1)) / strtofloat(rightstr(edit1.Text,length(edit1.Text)-w)));

'+': edit2.text:= floattostr(strtofloat(LeftStr(edit1.Text,w-1)) + strtofloat(rightstr(edit1.Text,length(edit1.Text)-w)));

'-': edit2.Text:= floattostr(strtofloat(LeftStr(edit1.Text,w-1)) - strtofloat(rightstr(edit1.Text,length(edit1.Text)-w)));


End;



except

On ECONVERTERROR DO BEGIN

end;

end;

end;

end.



2013. okt. 28. 13:09
1 2 3 4 5 6 7 8
 1/80 anonim ***** válasza:
56%

Ez így nem is fog menni.

Fordított lengyelformára kell hozni, aztán onnantól kezdve már elég egyszerűen végrehajthatóak a műveletek.

2013. okt. 28. 13:19
Hasznos számodra ez a válasz?
 2/80 zsomkovacs ***** válasza:
74%

Jól látom, hogy Delphi-ben kéne? Most nincs időm kódolni (meg Delphi-m sincs), este lehet, hogy nekiállok, most csak Erlang kódot tudnék adni, de az nagyon más. Az algoritmus egyébként a következő:


1) Lengyelformára hozod a kifejezést (wikipedián azt hiszem, még az algoritmusa is fent van). Lényegében egy vermet építesz a szövegben szereplő jelekből. Mindig csak egy karaktert nézel, elágazással lehet vizsgálni, hogy értelmezhető-e a jel, és ha igen, mit jelent. Nem kell bele strtofloat, ha szám volt a karakter, számként értelmezed, ha műveleti jel, műveleti jelként.

2) Kiértékeled a lengyelformát. Ez már egyszerű, mindig van két operandusod és egy operátorod, elvégzed a műveletet (ismét csak egy elágazással), és az eredményt berakod az első operandus helyére. Ismétled, amíg nem üres a verem, majd az eredményt kiírod.

2013. okt. 28. 13:20
Hasznos számodra ez a válasz?
 3/80 A kérdező kommentje:
Köszönöm, de egy forráskódnak jobban örülnék, van időm még, inkább megvárom, ha vagy olyan kedves és belinkeled estére, vagy holnapra. Előre is köszönöm!!!!
2013. okt. 28. 13:25
 4/80 anonim ***** válasza:
80%

lengyelformára is hozhatod, de azt is csinálhatod, hogy szétdarabolod operátorokra/operandusokra, elkezded keresni a szorzást/osztást balról jobbra, ha találsz egyet, elvégzed a két oldalán lévő operandusokkal, és berakod az eredményt a 3 token helyére, mint egy újabb

aztán ez addig megy, míg van szorzás/osztás

akkor jöhet ugyanez összeadás/kivonás és készen vagy

2013. okt. 28. 13:37
Hasznos számodra ez a válasz?
 5/80 A kérdező kommentje:
Értem és köszönöm,de a forrásra lenne szükségem,mert örültem,hogy ideáig eljutottam valahogy, már így is hetekbe tellett mire elszórakoztam vele, nehéz a felfogásom amúgy is és már gondolhatod milyen fáradt vagyok tőle :) :((.
2013. okt. 28. 13:48
 6/80 A kérdező kommentje:
Előre is koszőszöm, ha valaki megkönyörülne rajtam egy használható kóddal. :)
2013. okt. 28. 13:50
 7/80 iostream ***** válasza:
87%
Ezt most csak úgy ideírom, remélem senki nem oldja meg a kérdező házifeladatát, és esetleg tényleges segítséget is kér. Addig is követem a kérdés alakulását. A lengyelforma nem túl intuitív, sokkal szebb a rekurzív megoldás (műveleti fát építesz, csak nem direktben hanem a stacken implicit), de a fordított irány, a szorzások osztások megkeresése és elvégzése is elég emberközeli.
2013. okt. 28. 13:53
Hasznos számodra ez a válasz?
 8/80 A kérdező kommentje:
Kösz szépen, ez igazán rendes volt tőled! Már is tipikusan megmutatkozott, az első igazi Magyar mentalitás. Tudjátok mit szarok rá és senkitől nem kérek további segítséget. A megoldásra tuti előbb-utóbb rá fogok jönni.Mindegy,hogy milyen matematikai algoritmus bevonásával. Csak nagyon elfáradtam és szerettem volna tényleges, gyors és megkímélő segítséget kérni, hogy minél előbb túl legyek ezen a baromságon. Ezt sok vizsgakérdésnél kérik mostanság. Úgyhogy nehogy megtudja még valaki oldani, rajtam kívül a feladatot. Mindenki csak szépen szenvedjen el vele, ahogy eddig is volt és ha meglesz a megoldás én sem fogom ide belinkelni, nehogy valakin segítsek és példaként még fel is használhassa. Minden normális válaszadónak köszönöm a segítséget, de én nem szociálpszichológiai megfigyelést tartok itt, mint egyesek, hanem segítséget szerettem volna kérni. Az embertanulmányozás nagyon szép dolog, de azt nem a földön kell gyakorolni, hanem tágabb értelembe, az univerzumban, ahol még találni kell egy olyan lény csoportot, akik szívesen veszik, sőt még örülnek is neki, hogyha megfigyelik őket és a reakcióikat tanulmányozzák. Sok sikert mindenkinek!!!!
2013. okt. 28. 14:15
 9/80 anonim ***** válasza:
89%

Felesleges hőbörögnöd, ez nem a magyar mentalitás, hanem az "akkor tanul a gyerek, ha csinálja" megoldás. Én is remélem, hogy senki nem fog neked kész kódot linkelni, mert azzal téged foszt meg a gondolkodás terhétől, ami -hiszed vagy sem- rohadtul negatív dolog a számodra. Ha más oldja meg helyetted, akkor mi értelme volt a feladat megoldásának?

G.

2013. okt. 28. 14:20
Hasznos számodra ez a válasz?
 10/80 iostream ***** válasza:
87%
És még neki áll feljebb, mert nem oldja meg senki a házifeladatát helyette, hanem praktikus segítséget adnak ahhoz, hogy megoldja egyedül.
2013. okt. 28. 14:20
Hasznos számodra ez a válasz?
1 2 3 4 5 6 7 8

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!