Chtel bych udelat program který bude reagovat na položenou otázku s předem definovanou odpovědí.
Pomůžete mi v kousku kodu ?
Předem děkuji za odpověd.
Fórum › C / C++
Prosim RADU
Pořádně nechápu co máš na mysli... Pokud máš zadanou tabulku hodnot otázka/odpověď, tak program může vypadat např. takto:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string, string> tabulka;
//Naplnění tabulky daty:
tabulka["Jakou barvu má obloha?"] = string("Modrou");
tabulka["Kolik je 1+1?"] = string("2");
string otazka;
cout << "Zadejte otázku: ";
getline(cin, otazka);
string odpoved = tabulka[otazka];
if(odpoved.size() == 0)
cout << "Neznám odpověď";
else
cout << odpoved;
return 0;
}
Tou otazkou myslím třeba klasickou komunikaci ... Ale ten poslední kod se mi opravdu libi :) zkusím to a popřípadně se ještě ozvu... chtěl bych vytvořit program takový chatovaci o to mi jde... kamarád mě poprosil jestli by to bylo možne tak sem řekl, že něco zkusim a uvidíme jak to dopadne... Každopádně děkuji za odpověď
jeste dotaz
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string, string> tabulka;
//Naplnění tabulky daty:
tabulka["Jakou barvu ma obloha?"] = string("Modrou");
tabulka["Kolik je 1+1?"] = string("2");
string otazka;
cout << "Zadejte otázku: ";
getline(cin, otazka);
string odpoved = tabulka[otazka];
if(odpoved.size() == 0)
cout << "Neznam odpoveď";
else
cout << odpoved;
system("pause");
return 0;
}
u tohoto kodu jak se vraci zpatky hodnota na otazku ? vypise mi to jen jednou
a pak se program ukonči
#7 Mikys
nekonečnej cyklus... "brejkneš" to pak dle potřeby, ale na tvím místě, bych se spíš naučil aspoň základy, kdyby ti kamarád řekl, zkus naprogramovat kopii Windows, tak tu budes psát denně 10+ dotazů a "tvůj" kód bude složenej z našich kódů =D
Né opravdu... nauč se základy aspon ;)
Omlouvám se pokud to někoho naštvalo učím se c++ 2týdny.. učím se z knihy ( mistrovství c++) ale zatím to tam nikde nerozepisoval proto se ptám zde... a proto možná existuje tohle forum :)
Každopádně děkuji za odpovědi... a když to řeknu jinak člověk má hubu na to aby se ptal :)
Ale i tak se teda omlouvám :)
jde o to ze udelat tendle typ odpovidace je pomerne narocny... neni to zrovna projekt co by clovek chtel delat po 2 tydnech... resp da se to udelat jednoduse, ale sebemensi odchylka a uz to nenajde odpoved
#12 KIIV
Ano nadtim sem premyslel ... proto sem udelal ReadMe co vypise program na zacatku :)
jen jeste prosim otazka docela badam na tim jak program prinutit aby se nevypnul po prvni otazce
to mam za kazdou odovedi davat break ? nebo se to da uz udelat v tom returnu 0; premyslel sem ze by se dalo zadat na navrat pocatecní otázky ale jak koliv to napisu tak kompilator haze chybu
#13 Mikys
Aby se ti nevypnul, tak nekonečnou smyčku:
while(true)
{
//Tvůj kód zde, pro ukončení stačí break;
}
popř. ještě se používá:
bool hotovo = false;
while(!hotovo)
{
//Kód zde
//Pokud potřebuješ ukončit, tak hotovo = true
}
Jinak tyto chatovací programy se většinoupíšou na základě jednoduché analýzy vstupu. Proto jsou tak blbé. Např.hledají ve vstupu sprosté slovo - pokud tam je, tak vypíší větu ve smyslu "Nebuď sprostý". Nebo hledají jména, klíčová slova např. pro otázky počasí atd... (např. když najde ve vstupu slovo venku a pěkně, tak vypíše větu ve smyslu "Ano, opravdu je venku pěkně, ale včera bylo škaredě") Porozumnění "lidské komunikaci" je zatím velký problém.
#14 yaqwsx
prosim vas jeste kde ten kod ted mam zadat presneji vlozim vas kod co jste mi napsal a jestli vas muzu drzovat vypiste ho zpatky stim upravenym o opakovani
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string, string> tabulka;
//Naplnění tabulky daty:
tabulka["Jakou barvu má obloha?"] = string("Modrou");
tabulka["Kolik je 1+1?"] = string("2");
string otazka;
cout << "Zadejte otázku: ";
getline(cin, otazka);
string odpoved = tabulka[otazka];
if(odpoved.size() == 0)
cout << "Neznám odpověď";
else
cout << odpoved;
return 0;
}
kazdopadne vubec netusim jak se vam mam za to kompenzovat... strasne jste mi pomohl
#15 Mikys
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<string, string> texty;
// seznam otazek a odpovedi
texty["ahoj"] = "cau";
texty["jak se mas?"] = "dobre";
texty["tak zatim"] = "jojo";
// nekonecny cyklus
// je nutne ukoncit program rucne pres break/return/exit
while (true)
{
// pres konzoli se ptam na otazku
string otazka;
getline(cin, otazka);
// pokud otazka bude ":q", tak ukonci program
if (!otazka.compare(":q")) break;
// zjisti odpoved na danou otazku
string odpoved = texty[otazka];
// pokud se otazka bude vyskytovat v seznamu = bude na ni odpoved
// tak ji vypise.. pokue ne, tak vypise spodni text
cout << (odpoved.length() ? odpoved :
"Na tuto otazku neznam odpoved :(") << endl;
}
return 0;
}
#18 Mikys
to spíš tohle měli ve funkci a pokud něco neprošlo nebo prošlo, tak vrátili odpověď třeba lehká úprava...
#include <iostream>
#include <map>
#include <string>
using namespace std;
static map<string, string> texty;
void nactiTexty()
{
texty["ahoj"] = "cau";
texty["jak se mas?"] = "dobre";
texty["tak zatim"] = "jojo";
}
string odpoved(string& otazka)
{
string odpoved = texty[otazka];
return odpoved.length() ? odpoved :
"Na tuto otazku neznam odpoved :(";
}
int main()
{
nactiTexty();
while (true)
{
string otazka;
getline(cin, otazka);
if (!otazka.compare(":q")) break;
cout << odpoved(otazka) << endl;
}
return 0;
}
Ahoj.
Mám tu technický problém. Jsem začátečník a mám za úkol udělat aplikaci ohmova zákona. Aplikace se chová takto:
tlačítkem button musím násobit nebo dělit hodnoty v editech. Tady to jsem zatím spáchal:
int cislo;
if(edtA->Text == "IntToStr")
edtB->Text = IntToStr(cislo);
edtC->Text = edtA->Text / edtB->Text;
rbtOdpor->Checked = true;
else
if(edtA->Text == "IntToStr")
edtB->Text = IntToStr(cislo);
edtC->Text = edtA->Text*edtB->Text;
rbtNapeti->Checked = true;
Problém je že mě to vypíše chybu v else. Nevím asi tam mám nějakou začátečnickou chybu. Předem vám děkuji za odpověď
jenze syntaxe je:
if ( podminka )
prikaz_splneno();
else
prikaz_nesplneno();
pricemz je problem ze muzes else cast vynechat ... jak pak poznas ze tam ma byt 60prikazu a pak teprve else? Ci lepsi: co kdyz v tech 60 prikazech bude dalsi if - else ? k cemu patri to else?
A ted otazka za 2 bludistaky: kdyby jen existoval zpusob, jak rict C++ku, aby se skupina prikazu vzala jako jeden ...
#24 KIIV
už mi to funguje vyřešil jsem to takto:
if(edtA->Text == "IntToStr")
{
edtB->Text = IntToStr(cislo);
edtC->Text = edtA->Text / edtB->Text;
rbtOdpor->Checked = true;
}
else
if(edtA->Text == "IntToStr")
edtB->Text = IntToStr(cislo);
edtC->Text = edtA->Text * edtB->Text;
rbtOdpor->Checked = true;
Zrejme tam mas zopar logicky chyb, odsadil by som to takto, hned si potom vsimnes zopar chyb
if(edtA->Text == "IntToStr"){
edtB->Text = IntToStr(cislo);
edtC->Text = edtA->Text / edtB->Text; //ako mozes delit retazce ked minimalne jeden z nich obsahuje neciselny string "IntToStr"
rbtOdpor->Checked = true;
}
else if(edtA->Text == "IntToStr")edtB->Text = IntToStr(cislo); //preco testujes edtA->Text == "IntToStr" ked vies ze to bude false?
edtC->Text = edtA->Text * edtB->Text; //podobna blbost ako vyzsie
rbtOdpor->Checked = true;
#25 Yami
kazdopadne davam automaticky vsechno do bloku... se pak nestane ze bych neco pridal a zapomel na blok... a pak se divil proc mi to ty dalsi prikazy vykonava vzdy ... (protoze za else a if muze byt maximalne jeden prikaz - ostatni uz pak nepatri k tomu)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Prosím o radu! :) — založil brunoczech
Prosím o radu !!! — založil ospalka123
Prosím o radu — založil dave3++
Prosím o radu — založil Berry309
Prosím o radu — založil Pavel00
Moderátoři diskuze