Problem s podmínkou v c++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problem  s podmínkou v c++ – C / C++ – Fórum – Programujte.comProblem s podmínkou v c++ – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
riegger0
Duch
27. 10. 2012   #1
-
0
-

Dobrý den

Programuji stejný slovník jako Dutch77 v jazyce c++ . S c++ jsem začal programovat teprve před třemi dny tak se omlouvám předem za příšerný kód. Na slova jsem použil 2-dimenzionálního pole.

Problém je ve volbě "1 - hledat slovo". Uživatel nemusí specifikovat, zda je hledaný výraz česky či anglicky. Pokud slovník nenalezne slovo, které budeme hledat  vypíše se hláška "Slovo nebylo ve slovniku nalezeno."a program vyzve zadat volbu. Pokud nalezne vypíše slovo anglicky a česky a pak má program vyzvat zadat volbu, ale můj program vypíše i při správném nalezení s anglickým a českým slovem hlášku "Slovo nebylo ve slovniku nalezeno.". Nevím jak mám správně použít podmínky, aby se hláška nevypsala při nalezení slova. 

můj program:

Zadejte volbu: 1
Zadejte slovo: osel
Slovo nebylo ve slovniku nalezeno.
.
.

Zadejte volbu: 1
Zadejte slovo: car
Anglicky: car
Cesky: auto
Slovo nebylo ve slovniku nalezeno.
.
.
Zadejte volbu:

správný program:

Zadejte volbu: 1
Zadejte slovo: osel
Slovo nebylo ve slovniku nalezeno.
.
.

Zadejte volbu: 1
Zadejte slovo: car
Anglicky: car
Cesky: auto
.
.
Zadejte volbu:

Díky moc za jakoukoli radu.

#include <iostream>
using namespace std;

int main ()
{
zacatek:;

	cout << "*** Program anglickocesky slovnik ***\n" << endl;
	cout << "1 - hledat slovo" << endl;
	cout << "2 - vypsat slova" << endl;
	cout << "3 - pridat slovo do slovniku" << endl;
	cout << "4 - odebrat slovo ze slovniku" << endl;
	cout << "5 - Konec programu\n" << endl;
	
	int volbacisla;
	cout << "Zadejte volbu: ";
	cin >> volbacisla;
	int max = 100;
	string slovo[max][2];
	int pslov;
	pslov = 10;
	string hledaneslovo ;
	
	slovo[0][0]= "car";
	slovo[0][1]= "auto";
	slovo[1][0]= "apple";
	slovo[1][1]= "jablko";
	slovo[2][0]= "brother";
	slovo[2][1]= "bratr";
	slovo[3][0]= "flat";
	slovo[3][1]= "byt";
	slovo[4][0]= "key";
	slovo[4][1]= "klic";
	slovo[5][0]= "spring";
	slovo[5][1]= "jaro";
	slovo[6][0]= "summer";
	slovo[6][1]= "leto";
	slovo[7][0]= "autumn";
	slovo[7][1]= "podzim";
	slovo[8][0]= "winter";
	slovo[8][1]= "zima";
	slovo[9][0]= "music";
	slovo[9][1]= "hudba";
	
	switch (volbacisla) {
	case 1:
		cout << "Zadejte slovo: ";
		cin >> hledaneslovo;
		for(int j = 0;  j < pslov; j++) {
			if ((hledaneslovo == slovo[j][0]) || (hledaneslovo == slovo[j][1])) {
				cout << "Anglicky: " <<  slovo [j][0] << endl << "Cesky: " << slovo [j][1] << endl;
			}
		}
		{
			/*else*/ cout << "Slovo nebylo ve slovniku nalezeno." << endl << endl;
		}
		break;
	case 2:
		cout << endl << "Slova:" << endl ;
		for(int i = 0; i < pslov; i++)
			cout << slovo[i][0] << "\t\t\t" << slovo[i][1] << endl;
		cout << endl;
		break;
		/*case 3:
		break;
		case 4:
		break;*/
	case 5:
		return 0;
		break;
	default:
		cout << "Zadali jste neplatne zadani." << endl;
		cout << endl;
	}
	goto zacatek;
	return 0;
}
Nahlásit jako SPAM
IP: 93.91.49.–
Reklama
Reklama
Řešení
crazy
~ Moderátor
+10
Grafoman
27. 10. 2012   #2
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

#1 riegger
#1 riegger

bool nalezeno = false;
for(int j = 0;  j < pslov; j++) {
	if ((hledaneslovo == slovo[j][0]) || (hledaneslovo == slovo[j][1])) {
		cout << "Anglicky: " <<  slovo [j][0] << endl << "Cesky: " << slovo [j][1] << endl;
				nalezeno = true;
				break;
	}
}
if(!nalezeno) 
{
	cout << "Slovo nebylo nalezeno." << endl;
}
Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Matrix17
~ Anonymní uživatel
285 příspěvků
27. 10. 2012   #3
-
+1
-
Zajímavé

Zkus se mrknout na slovníkovou strukturu. Je to paměťově mnohem míň náročný a hlavně se to používá přesně na tyhle věci. ;)

Nahlásit jako SPAM
IP: 213.226.237.–
riegger0
Duch
27. 10. 2012   #4
-
0
-

#1 riegger
Děkuji moc Crazymu za rychlou a skvělou odpověď a Matrixovi za radu. Funguje mi to tak jak má.

Nahlásit jako SPAM
IP: 93.91.49.–
riegger0
Duch
27. 10. 2012   #5
-
0
-

#4 riegger
Teď  jsem se zasekl u volby 3 přidat slovo - Uživatel zadá nové české slovo. Pokud slovník nalezne totožné české slovo vypíše se hláška "Chyba - slovo ve slovniku jiz existuje!" a znovu se zeptá na zadat české slovo. Pokud nenalezne tak vložené české slovo se uloží do slovníku pak zadané anglické slovo se též uloží do slovníku na poslední dvojici slov. A u volby 4 odebrat slovo -  Uživatel nemusí specifikovat, zda je mazán výraz česky či anglicky. Pokud slovník nenalezne slovo, které budeme mazat  vypíše se hláška "Slovo nebylo ve slovniku nalezeno!" Pokud nalezne smaže ceske i anglické slovo. Já mám 10 vestavěných slov. Tento počet mám uložen v proměnné pslov ale já potrebuji aby se tato proměnná při smazání nebo přidání slova měnila. Také aby když zadám volbu 1 hledat slovo byla nalezená nová dvojice nebo naopak smazaná dvojice uz nesla najit. Také po zadání volby 2 vypsat slova byla nová dvojice slov vypsána na poslední místa naopak zmazaná dvojice se neobjeví a celý seznam se posune o místo zmazaných slov. Slovník má mít kapacitu 100 dvojic slov takže když je překročena kapacita tak vypíše hlášku "Prekrocena kapacita slovniku".

sprábný program:

Zadejte volbu: 3
Zadejte nove slovo cesky: auto
Chyba - slovo ve slovniku jiz existuje!
Zadejte nove slovo cesky: pes
Zadejte nove slovo anglicky: dog
.
.
Zadejte volbu: 3
Zadejte nove slovo cesky: pes
Chyba - slovo ve slovniku jiz existuje!
Zadejte nove slovo cesky: ahoj
Zadejte nove slovo anglicky: hello
.
.
Zadejte volbu: 2

Slova:
car          auto
apple       jablko
brother    bratr
flat          byt
key         klic
spring     jaro
summer  leto
autumn   podzim
winter     zima
music     hudba
dog       pes
hello     ahoj

.
.
Zadejte volbu: 4
Zadejte slovo na smazani: kocka
Slovo nebylo ve slovníku nalezeno!

.
.
Zadejte volbu: 4
Zadejte slovo na smazani: klic
.
.
Zadejte volbu: 4
Zadejte slovo na smazani: klic
Slovo nebylo ve slovníku nalezeno!
.
.
Zadejte volbu: 4
Zadejte slovo na smazani: dog
.
.
Zadejte volbu: 4
Zadejte slovo na smazani: jablko
.
.
Zadejte volbu: 2

Slova:
car          auto
brother    bratr
flat          byt
spring     jaro
summer  leto
autumn   podzim
winter     zima
music     hudba
hello       ahoj

Asi už toho chci moc, ale opravdu si nevím rady.
Předem díky moc .


#include <iostream>

using namespace std;

int main (int argc, char **argv)
{
zacatek:;
	cout << "*** Program anglickocesky slovnik ***\n" << endl;
	cout << "1 - hledat slovo" << endl;
	cout << "2 - vypsat slova" << endl;
	cout << "3 - pridat slovo do slovniku" << endl;
	cout << "4 - odebrat slovo ze slovniku" << endl;
	cout << "5 - Konec programu\n" << endl;
		
	int max = 100;	
	string slovo[max][2];	
	int pslov;	 
	pslov = 10;	 
	string pracovnislovo ; 
	
	slovo[0][0]= "car";
	slovo[0][1]= "auto";
	slovo[1][0]= "apple";
	slovo[1][1]= "jablko";
	slovo[2][0]= "brother";
	slovo[2][1]= "bratr";
	slovo[3][0]= "flat";
	slovo[3][1]= "byt";
	slovo[4][0]= "key";
	slovo[4][1]= "klic";
	slovo[5][0]= "spring";
	slovo[5][1]= "jaro";
	slovo[6][0]= "summer";
	slovo[6][1]= "leto";
	slovo[7][0]= "autumn";
	slovo[7][1]= "podzim";
	slovo[8][0]= "winter";
	slovo[8][1]= "zima";
	slovo[9][0]= "music";
	slovo[9][1]= "hudba";
	
	int volbacisla;
	cout << "Zadejte volbu: ";
	cin >> volbacisla;
	
	switch (volbacisla) 
	{
	
		case 1:	 
			cout << "Zadejte slovo: ";
			cin >> pracovnislovo;
			{
				bool nalezeno = false;
				for(int j = 0;  j < pslov; j++) 
					{
					if ((pracovnislovo == slovo[j][0]) || (pracovnislovo == slovo[j][1])) 
						{
						cout << "Anglicky: " <<  slovo [j][0] << endl << "Cesky: " << slovo [j][1] << endl << endl;
						nalezeno = true;
						break;
						}
					}
				if(!nalezeno) 
					{
					cout << "Slovo nebylo ve slovniku nalezeno." << endl << endl;
					}
			}
		break;
		
		
		case 2:	 
			cout << endl << "Slova:" << endl ;
			for(int i = 0; i < pslov; i++)
				cout << slovo[i][0] << "\t\t\t" << slovo[i][1] << endl; 
				cout << endl;
		break;
		
		case 3:
			zpet:;
			cout << "Zadejte nove slovo cesky: ";
			cin >> pracovnislovo; 
			{
				bool nalezeno = false;
				for(int k = 0;  k < pslov; k++) 
					{
					if (pracovnislovo == slovo[k][1]) 
						{
						cout << "Chyba - slovo ve slovniku jiz existuje!" << endl;
						nalezeno = true;
						goto zpet;
						break;
						}
					}
				if(!nalezeno) {
					string anglickeslovo;
					cout << "Zadejte nove slovo anglicky: ";
					cin >> anglickeslovo;
					pslov++;
					slovo[pslov][1] = pracovnislovo;
					slovo[pslov][0] = anglickeslovo;
					
					}
			}
		break;
		
		case 4:
			cout << "Zadejte slovo na smazani: ";
			cin >> pracovnislovo;
			{
				bool nalezeno = false; 
				for(int x = 0;  x < pslov; x++) 
					{
					if ((pracovnislovo == slovo[x][0]) || (pracovnislovo == slovo[x][1])) 
						{
						pslov--;
						nalezeno = true;
						cout << endl;
						break;
						}
					}
				if(!nalezeno) 
					{
					cout << "Slovo nebylo ve slovniku nalezeno!" << endl << endl;
					}
			}
		break;
	
		case 5:	
			return 0; 
		break;
		
		default:	
		cout << "Zadali jste neplatne zadani." << endl; 
		cout << endl;
	}
	goto zacatek;	
}
Nahlásit jako SPAM
IP: 93.91.49.–
VaaR0
Duch
27. 10. 2012   #6
-
0
-

Zdar riegger,

také studuješ na JCU? Tohle je ukol z programování :-) Já už to mám vyřešené. Jako Menu jsem použil kod podobny co jsme tady ve foru řešili včera. Jinak vložení slov mám udělané, že při průchodu polem se dotazuji zda je prázdná pozice if (slovo[i] == "") pak zapis do slovo[i] = zadaneSlovo;

to samé mám při mazání. Tam je ale potřeba při smazání slova posunout zbylé pole o jedno dolů takže něco takového - slovo[i] = slovo[i + 1];

Nahlásit jako SPAM
IP: 89.203.175.–
riegger0
Duch
27. 10. 2012   #7
-
0
-

Ano studuju :) díky za radu

tady jsem něco napsal podle tve rady ale pouzivam 2 dimenz. pole tak mi to moc nefunguje, asi víš že mi moc času nezbývá :) a u mazani nechapu proč i + 1 když se ma naopak zmenšit mohl bys mi to vice specifikovat a ukazat na mem příkladu

		case 3: // volba 3 - pridat slovo do slovniku
			zpet:;
			cout << "Zadejte nove slovo cesky: ";
			cin >> pracovnislovo; // prida ceske slovo
			{
				bool nalezeno = false;
				for(int k = 0;  k < pslov; k++) 
					{
					if ( (slovo[k][1])=="") 
						{
						string anglickeslovo;
						cout << "Zadejte nove slovo anglicky: ";
						cin >> anglickeslovo;
						slovo[k][1] = pracovnislovo;
						slovo[k][0] = anglickeslovo;
						nalezeno = true;
						cout << endl;
						}
					}
				if(!nalezeno) 
					{cout << "Chyba - slovo ve slovniku jiz existuje!" << endl;
					goto zpet;
					
					}
			}
		break;
		
		case 4:  // Volba 4 - odebrat slovo ze slovniku
			cout << "Zadejte slovo na smazani: ";
			cin >> pracovnislovo;
			{
				bool nalezeno = false; 
				for(int x = 0;  x < pslov; x++) 
					{
					if ((pracovnislovo == slovo[x][0]) || (pracovnislovo == slovo[x][1])) 
						{
						slovo[x][2] = slovo ??;
						nalezeno = true;
						cout << endl;
						}
					}
				if(!nalezeno) 
					{
					cout << "Slovo nebylo ve slovniku nalezeno!" << endl << endl;
					}
			}
		break;
Nahlásit jako SPAM
IP: 93.91.49.–
VaaR0
Duch
27. 10. 2012   #8
-
0
-

#7 riegger
proměnné vyhoď nad main(). Pokaždé když jsi se tam vrátil pomocí goto zpet; tak se ti znova deklarovaly proměnné.

Upravil jsem ti vložení slova "volba 3". Stejně bude i "volba 4" akorát tam přiřadíš " ". Ošetři si vypisování "volba 2" aby se ti nevypisovalo všech 100 polí. Zase použiješ if ( slovo[k][1] == "" ) pak break;

u proměnné pslov jsi měl nastaveno je 10.. pak by průchod polem pokračoval jen do těch 10 a nevypisoval další položky

#include <iostream>

using namespace std;

    // int max = 100;	
	string slovo[100][2];	
	int pslov = 100;	 
	string pracovnislovo ; 
	int c;

int main (int argc, char **argv)
{
zacatek:;
	cout << "*** Program anglickocesky slovnik ***\n" << endl;
	cout << "1 - hledat slovo" << endl;
	cout << "2 - vypsat slova" << endl;
	cout << "3 - pridat slovo do slovniku" << endl;
	cout << "4 - odebrat slovo ze slovniku" << endl;
	cout << "5 - Konec programu\n" << endl;
		
	
	
	
	slovo[0][0]= "car";
	slovo[0][1]= "auto";
	slovo[1][0]= "apple";
	slovo[1][1]= "jablko";
	slovo[2][0]= "brother";
	slovo[2][1]= "bratr";
	slovo[3][0]= "flat";
	slovo[3][1]= "byt";
	slovo[4][0]= "key";
	slovo[4][1]= "klic";
	slovo[5][0]= "spring";
	slovo[5][1]= "jaro";
	slovo[6][0]= "summer";
	slovo[6][1]= "leto";
	slovo[7][0]= "autumn";
	slovo[7][1]= "podzim";
	slovo[8][0]= "winter";
	slovo[8][1]= "zima";
	slovo[9][0]= "music";
	slovo[9][1]= "hudba";
	int volbacisla;
	cout << "Zadejte volbu: ";
	cin >> volbacisla;
	
	switch (volbacisla) 
	{
	
		case 1:	 
			cout << "Zadejte slovo: ";
			cin >> pracovnislovo;
			{
				bool nalezeno = false;
				for(int j = 0;  j < pslov; j++) 
					{
					if ((pracovnislovo == slovo[j][0]) || (pracovnislovo == slovo[j][1])) 
						{
						cout << "Anglicky: " <<  slovo [j][0] << endl << "Cesky: " << slovo [j][1] << endl << endl;
						nalezeno = true;
						break;
						}
					}
				if(!nalezeno) 
					{
					cout << "Slovo nebylo ve slovniku nalezeno." << endl << endl;
					}
			}
		break;
		
		
		case 2:	 
			cout << endl << "Slova:" << endl ;
			for(int i = 0; i < pslov; i++)
				cout << slovo[i][0] << "\t\t\t" << slovo[i][1] << endl; 
				cout << endl;
		break;
		
		case 3: // volba 3 - pridat slovo do slovniku
			zpet:;
			cout << "Zadejte nove slovo cesky: ";
			cin >> pracovnislovo; // prida ceske slovo
			{
				for(int k = 0;  k < pslov; k++) {
					if ( pracovnislovo == slovo[k][0] || pracovnislovo == slovo[k][1] ) 
						{
						cout << "Chyba - slovo ve slovniku jiz existuje!" << endl;
						goto zpet;
						break;
						}
				}			
			string anglickeslovo;
			cout << "Zadejte nove slovo anglicky: ";
			cin >> anglickeslovo;
				
				for(int k = 0; k < pslov; k++){
					if ( slovo[k][1] == "" ) {
						slovo[k][1] = pracovnislovo;
						slovo[k][0] = anglickeslovo;
						cout << endl;
						break;
					}
				}
			break;
			}
	
		break;
		
		case 4:  // Volba 4 - odebrat slovo ze slovniku
			cout << "Zadejte slovo na smazani: ";
			cin >> pracovnislovo;
			{
				bool nalezeno = false; 
				for(int x = 0;  x < pslov; x++) 
					{
					if ((pracovnislovo == slovo[x][0]) || (pracovnislovo == slovo[x][1])) 
						{
						slovo[x][0] = "";	// vymaze slova
						slovo[x][1] = "";
						c = x;						
						nalezeno = true;
						cout << endl;
						}
						while (c <= 98){
							slovo[c][0] = slovo[c + 1][0];
							slovo[c][1] = slovo[c + 1][1];
							c++;
						}
					}
				if(!nalezeno) 
					{
					cout << "Slovo nebylo ve slovniku nalezeno!" << endl << endl;
					}
			}
		break;
	
		case 5:	
			return 0; 
		break;
		
		default:	
		cout << "Zadali jste neplatne zadani." << endl; 
		cout << endl;
	}
	goto zacatek;	
}
Nahlásit jako SPAM
IP: 89.203.175.–
vitamin+8
Grafoman
27. 10. 2012   #9
-
0
-

#1 riegger
Ten program co robis bude zrejme uloha do skoly, ako je potom mozne ze programujes v c++ len 3 dni? :)

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
riegger0
Duch
27. 10. 2012   #10
-
0
-

#4 riegger
Já jsem fakt zoufalec ale nevím jak tu  druhou volbu osetřit zkousel to všeljak mě napadlo ale jinak díky moc za tvoji ochotu mi pomoci

to sem nasmolil ale fakt netušim, jsem asi meně chápavej člověk

a tu 4 volbu uz vubec netusim

tak bych potreboval vysvětlit ještě co vlstně ta podmínka if ( slovo[k][1] == "" ) dělá ?

case 2:  // volba 2 - vypsat slova
   cout << endl << "Slova:" << endl ;
   for(int i = 0; i < pslov; i++){
    if (( slovo[i][0] == "" )&&(slovo[i][1] == ""))
    cout << slovo[i][0] << "\t\t\t" << slovo[i][1] << endl;
    cout << endl;
    break;
    }
   
  break;	
			
Nahlásit jako SPAM
IP: 93.91.49.–
riegger0
Duch
28. 10. 2012   #11
-
0
-

#4 riegger
Včera jsem odevzdal ten můj nedodělek    těsně před termínem odevzdání. Tak jestli když už o nic nejde pane Vaar  mohl ukázat jak měla být správně volba 2 a 4  prosím docela mě to zajímá. Jinak děkuji za vaší ochotu mi pomoci.

Pan Vitamin pretože som hňup, ktorý robí všetko na poslednú chvíľu. 

Nahlásit jako SPAM
IP: 93.91.49.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 129 hostů

Podobná vlákna

Problém s podmínkou — založil Dominika

Problém s podminkou — založil Coal_Asasin

Problém s podmínkou if — založil k2k21

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý