Príklad v C++

Programovacie jazyky, rady, poradňa...
FeCp
Novice
Novice
Príspevky: 3
Registrovaný: 27 júl 2013, 20:51

Príklad v C++

Príspevok od používateľa FeCp »

Zdravim, potrebujem pomoc s jedným príkladom v C++. Momentálne sa učím programovať pomocou knihy Mistrovství v C++ a neviem si rady s jedným príkladom. Tu je zadanie:
Když vstoupíte do Řádu vlídnych programátoru, mužete být na setkáních ŘVP znám pod svým skutečným jménem pracovním zařazením, tajným členským jménem ŘVP. Vytvářený program založte na nasledující struktuře:
struct rvp {
char celejmeno[velretezce]; //skutečné jméno
char praczaraz[velretezce]; //pracovní zařazení
char rvp jmeno[velretezce]; //tajné jméno ŘVP
int volba; //0 = celejmeno, 1 = praczaraz, 2 = rvp jmeno
};
V programu vytvořte malé pole struktur a inicializujte ho vhodnými hodnotami. Do programu vložte cyklus, který užívatelum umožní vybírat z ruznych možností:
a. vypis jmen b. vypis pracovnich zarazeni
c. vypis jmen RVP d. vypis podle volby
k. konec
Všimněte si, že "výpis podle volby" neznamená vypsaní členu struktury volba, ale výpis členu struktury, který odpovídá číslu uloženému v členu volba. Pokud má například člen volba hodnotu 1, zadání písmene d zobrazí programátorovo pracovní zařazení. Spuštěný program muže vypadat následovně:
Vypis clenu Radu vlidnych programatoru
a. vypis jmen b. vypis pracovnich zarazeni
c. vypis jmen RVP d. vypis podle volby
k. konec
Zadejte svou volbu: a
Wimp Macho
Raki Rhodes
Celia Laiter
Hoppy Hipman
Pat Hand
Dalsi volba: d
Wimp Macho
Junior Programmer
MIPS
Analyst Trainee
LOOPY
Dalsi volba: q
Ahoj!
Program mi vcelku ide len nechápem tejto časti zadania (tá je jedinou časťou programu, ktorá mi nefunguje :smt017 )
Všimněte si, že "výpis podle volby" neznamená vypsaní členu struktury volba, ale výpis členu struktury, který odpovídá číslu uloženému v členu volba. Pokud má například člen volba hodnotu 1, zadání písmene d zobrazí programátorovo pracovní zařazení.
Nechápem tomu ako mám vložiť nejaké číslo do členu volba :nono: , vedel by mi niekto ochotný s tým pomôcť alebo mi to vysvetliť??
Za pomoc dik, tu je môj kód:

Kód: Vybrať všetko

#include <iostream>
using namespace std;
struct rvp
{
	char celemeno[20];
	char praczarad[30];
	char rvpmeno[10];
	int volba;
};
void showmenu();
int main()
{
	rvp clenovia[5] =
	{
		{"....", ".....", "....."},
		{"....", ".....", "....."},
		{"....", ".....", "....."},
		{"....", ".....", "....."},
		{"....", ".....", "....."},
	};
	showmenu();
	cout << "Zadajte svoju volbu: ";
	char ch;
	cin >> ch;
	int i = 0;
	while (ch == 'a' || ch == 'b' || ch == 'c' || ch == 'd' || ch == 'k')
	{	
		if (ch == 'a')
			for (i = 0; i < 5; i++)
				cout << clenovia[i].celemeno << endl;
		else if (ch == 'b')
			for (i = 0; i < 5; i++)
				cout << clenovia[i].praczarad << endl;
		else if (ch == 'c')
			for (i = 0; i < 5; i++)
				cout << clenovia[i].rvpmeno << endl;
		else if (ch == 'd')
		{
			if (vyber[i].volba == 0)
				cout << clenovia[i].celemeno << endl;
			else if (vyber[i].volba == 1)
				cout << clenovia[i].praczarad << endl;
			else if (vyber[i].volba == 2)
				cout << clenovia[i].rvpmeno << endl;	
		}
		cout << "Zadajte svoju volbu: ";
		cin >> ch;
	}
	cout << "Ahoj!";
	return 0;
}
void showmenu()
{
	cout << "Vypis clenov  Radu vludnych programatorov\n";
	cout << "a. vypis mien		b. vypis pracovneho zaradenia\n";
	cout << "c. vypis mien RVP	d. vypis podla volby\n";
	cout << "k. koniec\n";
}
MeanSeriously
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 430
Registrovaný: 14 apr 2012, 15:07

Re: Príklad v C++

Príspevok od používateľa MeanSeriously »

hodnotu do volba ukladáš pri inicializovaní (ako môžeš vidieť v ukážkovom behu, nikde sa tam žiadne číslo nezadáva), rovnako ako meno, titul a prezývku. Potom, pri vypisovaní už len na základe voľby vyberieš, čo presne máš vypísať..

BTW - na overovanie viacerých hodnôt jednej premennej používaj switch, nie if/else.
BTW1 - ak všetky tvoje hodnoty pozostávajú z "..." tak to nemáš ani ako otestovať.
BTW2 neviem skade si zobral vyber, zmeň to na clenovia.

Program by mal vyzerať asi takto (aj keď som si to trochu zjednodušil pomocou do while, takže mi menu vypisuje stále, ale to hádam nevadí.):

Kód: Vybrať všetko

#include <iostream>
using namespace std;

struct rvp
{
	char celemeno[20];
	char praczarad[30];
	char rvpmeno[10];
	int volba;
};

void showmenu();

int main()
{
	const int pocetClenov = 5;
	rvp clenovia[pocetClenov] =
	{
		{"Alonzo Mcguinness", "Senior C++ Developer", "Deadman", 1},
		{"Clare Pyne", "Junior C++ Developer", "Greenhorn", 0},
		{"Chu Kimsey", "Lead Program Integrator", "...", 1},
		{"Leigh Berrey", "Sidekick", "Dummy", 1},
		{"Pansy Haggard", "IT Systems Manager", "Lazyone", 2},
	};
	char ch;

	do
	{
		showmenu();
		cout << "Vasa volba: ";
		cin >> ch;
		
		switch(ch)
		{
		case 'a':
			for(int i = 0; i < pocetClenov; i++)
				cout << clenovia[i].celemeno << endl;
			break;
		case 'b':
			for(int i = 0; i < pocetClenov; i++)
				cout << clenovia[i].praczarad << endl;
			break;
		case 'c':
			for(int i = 0; i < pocetClenov; i++)
				cout << clenovia[i].rvpmeno << endl;
			break;
		case 'd':
		{            
			for (int i = 0; i < pocetClenov; i++) 
			{
                switch (clenovia[i].volba) 
					{
                case 0 :
                    cout << clenovia[i].celemeno << endl;
                    break;
                case 1 :
                    cout << clenovia[i].praczarad << endl;
                    break;
                case 2 :
                    cout << clenovia[i].rvpmeno << endl;
                    break;
                default:
                    cout << "Neocakavana volba. " << endl; //Ak mas dobre inicializovane hodnoty, k tomuto by ani nemalo dojst.
                }
            }
            break;
		}
		default:
			break;			
		}

		cout << endl;
	} while(ch == 'a' || ch == 'b' || ch == 'c' || ch == 'd');

	cout << "Ahoj!";
	return 0;
}

void showmenu()
{
   cout << "Vypis clenov  Radu vludnych programatorov\n";
   cout << "a. vypis mien      b. vypis pracovneho zaradenia\n";
   cout << "c. vypis mien RVP   d. vypis podla volby\n";
   cout << "k. koniec\n" << endl;
}
FeCp
Novice
Novice
Príspevky: 3
Registrovaný: 27 júl 2013, 20:51

Re: Príklad v C++

Príspevok od používateľa FeCp »

Ok, dik za pomoc.
BTW - na overovanie viacerých hodnôt jednej premennej používaj switch, nie if/else.
hej, keď ma to napadlo tak som to už mal napísané a nechcelo sa mi to už prepisovať
BTW1 - ak všetky tvoje hodnoty pozostávajú z "..." tak to nemáš ani ako otestovať.
to som tam napísal iba preto lebo na tom čo je tam napísané až tak nezáleží (prepísať to môžeš kedykoľvek)
BTW2 neviem skade si zobral vyber, zmeň to na clenovia.

oh sorry môj preklep :oops:
Napísať odpoveď