Kezdőoldal » Számítástechnika » Programozás » Hogyan kéne megcsinálni c++ban?

Hogyan kéne megcsinálni c++ban?

Figyelt kérdés

Egy számítógép szövegszerkesztője úgy romlott el, hogy minden végzárójel gépelésekor megfordította a zárójelben lévő szöveg. Példa: "Ez a szoveg (satnor osle) elrontotta (kidosam) a szamitogep (kidamrah a tti) szovegszerkesztoje" Írjon egy algoritmust, amely kijavítja az elromlott szöveget. (Bemenete az elrontott szöveg, és kimenete a kijavított szöveg) Írjon egy programot amely megvalósítja a fenti algoritmust.



Teljesen elkadtam, elindulni sem tudom ... Algoritmus beadandó lenne... c++ban meg kell írni, utána algoritmusban is.. algoritmusban c++ alapján már könnyű, de nemtudom megírni c++ba, nincs hozzá elengedő tudás.. vermekkel kéne megcsinálni ... Azt mondták elvileg egyszerű, de számomra nem. Valaki tudna valamit segíteni?


2012. máj. 2. 21:24
1 2
 1/12 anonim ***** válasza:

metanyelven:

lesz egy tömböd, amibe a megfordítandó szöveget töltöd fel

lesz egy zarojelben_vagyok_e:Boolean típusú változód

egy nagy for ciklus, ami végigveszi a kapott szöveget

cikluson belül lesz 4 ellenőrzésed

if(aktualis_karakter == "("), akkor a boolean változót true értékre állítod, valamint az eredeti szövegbe raksz valami jelzést, hogy ide majd megy a megfordított tömb. ez az ellenőrzés megy leghátra, hogy magát a zárójelet ne tegye be a megfordítandó szöveg tömbbe

if(zarojelben_vagyok_e == true), akkor az aktuális karaktert betölti a tömbbe. ez lesz sorrendben a 3. elágazás

if(aktualis_karakter == ")"), akkor a boolean változót false-ra állítja, majd a mostanra feltöltött tömböt megfordítod. azt meg hadd ne magyarázzam el :) ezután a kész tömböt beilleszted a korábbi jelzés helyére. ez lesz sorrendben a 2. ellenőrzés

végül if(aktualis_karakter == NULL (vagy hasonló)), akkor kiír, kilép, és öröm és bódottá


c++ba már te írod meg, addig is tanulsz és gyakorolsz

2012. máj. 2. 22:13
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:

Először az algoritmust szokták kitalálni aztán kódolnak. Esetleg menet közben javítanak az algoritmuson ha kiderül hogyha nem jó ...

A bemeneti fájlt tekintsük egy (szállító)szalagnak melyről egyesével sorba jönnek az input szimbólumok (a karakterek).

Legyen egy állapot változónk melynek 2 állapota van :

normál: Ekkor az atuális bemeneti szimbólum egyből a kimentre kerüljön

vermes: ekkor egy verembe kerüljön az aktuális karakter


pszeudokód: [link]

2012. máj. 2. 22:27
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:
Ennek kb a felét értem :) szavakat megfordítani tudok, de a többi totál nem megy... nem programozó leszek :)
2012. máj. 2. 22:34
 4/12 A kérdező kommentje:
Azt nem értem, hogy a kijavított szavak, hogy kerüljenek vissza a zárójelen belüli részre
2012. máj. 2. 22:51
 5/12 anonim ***** válasza:

Így hátha érthetőbb [link] , az előbb a "kimentre ')'" sor lemaradt és kezdetben állapot=normál. Így már jó, ha minden megfelelő '('-nek van ')' párja.


"Azt nem értem, hogy a kijavított szavak, hogy kerüljenek vissza a zárójelen belüli részre"

Amíg nem jön '(' addig a bemeneti karaktereket a kimenetre írom. Utána amikor '(' karakter jön akkor az utána jövő karaktereket egy verembe rakom, amikor ')' karakter jön a kimentre írok egy '('-t utána a verem tartalmát kiírom a kimenetre és utána ')' karaktert írok és (ha van) az ez utáni karaktereket a kimentre írom kivéve ha nem '(' karakter jön.

Mj: A veremből fordított sorrendbe lehet kivenni az elemeket mint ahogy belekerültek.

2012. máj. 3. 00:32
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:

Megoldottam. Forráskód:



#include <iostream>

#include <string>

using namespace std;

char javit(char szoveg[]);

int main()

{

char szoveg[] = "Ez a szoveg (satnor osle) elrontotta (kidosam) a szamitogep (kidamrah a tti) szovegszerkesztoje";


puts(szoveg);

javit(szoveg);


cout<<endl; system("pause"); return 0;

}


char javit(char szoveg[])

{

int i=0,j=0,k=0,l;

while(szoveg[i]!='\0')

{

i++;

}

char *tmb;

tmb=new char[i];

char *tmb2;

tmb2=new char[i];


i = 0;

int m=0,si=0; bool zaro=false;

while(szoveg[i]!='\0')

{


if(szoveg[i]=='(')

{

zaro=true;

cout<<szoveg[i];

}

if(szoveg[i]==')')

{

zaro=false;

//cout<<endl<<"si:"<<si<<endl;

for(k=si; k>1; k--)

cout<<tmb[k];

si=0;

}

if(zaro)

{

si++;

tmb[si]=szoveg[i];

//cout<<"tmb[si]: "<<tmb[si]<<endl;

i++;

}

else {

cout<<szoveg[i]; i++;}


}

cout<<endl;

for(int i=0; i<j; i++) cout<<tmb[i];


return 0;

}

2012. máj. 3. 02:59
 7/12 A kérdező kommentje:
Nem veremmel lett megcsinálni, de köszönöm a vermes hozzászólást is, plusszoltalak, ahogy az első hozzászólást is köszönöm, téged is. :)
2012. máj. 3. 03:10
 8/12 anonim ***** válasza:

@02:59

Pedig veremmel sokkal egyszerűbb és rövidebb.Egyszerűbb ráadásul hogy csak meg kellett volna írni, már az ötletet a "poént" leírtam.

A te megoldásod nem teljes mert nem fájlból olvas. Előbb még a fájlt be kell "rántani" a többe, a tömbök méretét megfelelő méretűre kell állítani beleértve a segéd tömböket is.

Én is megoldottam, ez sem fájlból olvas hanem billentyűzetről enterig, de átírni semmiség, getchar-t getc-re kel cserélni és még néhány sorral kell kiegészíteni/módosítani a kódot. Még az a szépsége hogy mindig csak annyi memóriát használ amennyi szükséges.

Felraktam ide: [link]

2012. máj. 3. 11:36
Hasznos számodra ez a válasz?
 9/12 A kérdező kommentje:
Nem fájlból kell beolvasni, de a fájlból olvasás már egyszerű. A lényeg, hogy csak az algoritmus legyen meg.. Nem a c++ számít amúgy, de ez alapján könnyebb megrni az algoritmusát szerintem.
2012. máj. 3. 15:19
 10/12 A kérdező kommentje:
De ha megnézed a tömbök megfelelő méretüek, amennyi szöveg van annyi elemü a tömb, azért van létrehozva dinamikus tömb. De megnézem a te verziódat is, és értékelem a fáradozásodat :)
2012. máj. 3. 15:22
1 2

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!