Mistrovství v C++ (2 priklady - neviem si rady) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Mistrovství v C++ (2 priklady - neviem si rady) – C / C++ – Fórum – Programujte.comMistrovství v C++ (2 priklady - neviem si rady) – C / C++ – Fórum – Programujte.com

 

kloss
~ Anonymní uživatel
3 příspěvky
18. 7. 2013   #1
-
0
-

Potrebujem trochu pomci s dvoma príkladmi. Keby sa našiel niekto ochotný a pomohol mi. V prvom programe som si neni istý touto časťou zadania:
V záhlaví tohoto výpisu by mělo být poznamenáno, že se jedná o Velké patrony. Potom by měl program vypsat zbývající dárce se záhlavím Patroni.
Lebo napr. keď nezadám ani jedného prispievatela, ktorý daroval viac ako 10 000 výstup je takýto:
Velky patrony:
Patroni:
meno
suma

Ja by som chcel to, že keď nezadám ani jedného prispievatela, ktorý daroval viac ako 10 000, aby výstup bol
Patroni:
meno
suma
bez toho aby tam bolo aj to Velky patrony (alebo opačne).
PS: Neviem či som zadanie dobre pochopil a možno je kód dobre (aj keď pochybujem).


Zadanie je:
Vašim úkolem je vytvořit program, který bude udržovat přehled o peněžních příspěvcich Společnosti pro  zachování správneho vlivu. Tento program by měl požádat uživatele o zadání počtu přispěvatelu a potom o jméno  a částku příspevku každého dárce. Tyto informace by měly být uloženy v dynamicky alokovaném poli struktur. Každá struktura by měla mít dva členy : ynakové pole pro uložení jména a člen typu double pro uložení částky příspěvku. Po načtení všech dat by měl program zobrazit jména a častky příspěvku všech přispěvatelu, kteří darovali 10 000 a více. V záhlaví tohoto výpisu by mělo být poznamenáno, že se jedná o Velké patrony. Potom by měl program vypsat zbývající dárce se záhlavím Patroni. Pokud nejsou v žádné z těchto kategorií přispěvatelé, program by měl vypsat poznámku "bez příspěvku". Kromě zobrazovaní dvou kategorií nemusí program provádět žádné třídení.
 

#include <iostream>
struct prispievatelia
{
    char meno[20];
    double prispevok;
};
int main()
{
    using namespace std;
    cout << "Zadajte pocet prispievatelov: ";
    int pocet, i;
    cin >> pocet;
    cin.get();
    prispievatelia * pt = new prispievatelia[pocet];
        for (i = 0; i < pocet; i++)
        {
            cout << "Zadajte meno " << i+1 << " prispievatela: ";
            cin.getline(pt[i].meno, 20);
            cout << "Zadajte ciastku: ";
            cin >> pt[i].prispevok;
            cin.get();
        }
        cout << "Velky patrony:\n";
        for (int j = 0; j < i; j++)
        {
            if (pt[j].prispevok >= 10000)
                cout << pt[j].meno << "\n" << pt[j].prispevok << endl;
        }
        cout << "Patrony:\n";
        for (int k = 0; k < i; k++)
        {
            if (pt[k].prispevok > 0 && pt[k].prispevok < 10000)
                cout << pt[k].meno << "\n" << pt[k].prispevok << endl;
        }
    if (pocet == 0)
        cout << "Bez prispevku";
    delete [] pt;
    return 0;
}

 

Druhý príklad je úpravou prvého.

Změnte je tak, že budete číst data ze souboru. První položkou v souboru by měl  být počet dárcu a zbytek souboru by měl obsahovat dvojice řádku, kde na prvním řádku v každé dvojici je jméno dárce a na druhém řádku je příspěvek. Soubor by měl vypadat nějak takto:
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000

Nahlásit jako SPAM
IP: 178.41.124.–
Robo
~ Anonymní uživatel
82 příspěvků
20. 7. 2013   #2
-
0
-

#1 kloss
Ten prvý je tak stavaný, aby tam to veľké patrony bolo stále hore. Ale dá sa to zmeniť aj tak ako chceš ty a  to 
tak, že si do programu vložíš počítadlo a reťazec veľké patrony sa ti vypíše len raz, keď bude počítadlo na nule.

int count = 0;

if(pt[i].prispevok >= 10000){
	if(count == 0){
		cout << "Velke patrony:\n";
		count = 1;
	}
	cout << pt[i].meno << ....
}


A čo konkrétne nevieš u toho druhého ?
Ja keď som to dávno robil, tak som to robil tak, že načítal som si prvé číslo zo súboru, následne som si spravil pole dynamických štruktúr (v tomto príklade 4) a potom si v cykle while postupne načítaval údaje zo súboru do premenných v štruktúre

Nahlásit jako SPAM
IP: 178.253.156.–
Robo
~ Anonymní uživatel
82 příspěvků
20. 7. 2013   #3
-
0
-

Nudil som sa, tak tu ho máš aj stou úpravou, čo si chcel v prvom príklade

#include <iostream>
#include <fstream>
#include <cstdio>

using namespace std;

struct prispievatelia{
	char meno[20];
	double prispevok;
};

int main()
{
	ifstream inFile;
	char file[20];

	cout << "Zadajte meno suboru: ";
	cin.getline(file, 20);

	inFile.open(file);
	if(!inFile.is_open()){
		cout << "Nepodarilo sa otvorit subor " << file << endl;
		system("PAUSE");
		exit(EXIT_FAILURE);
	}

	int count; //nacitanie prveho cisla, cize pocet poly struktur

	inFile >> count;
	inFile.get();

	prispievatelia *ps = new prispievatelia[3];
	int i = 0;

	while(inFile.good()){
		inFile.getline(ps[i].meno, 20);
		inFile >> ps[i++].prispevok;
		inFile.get();

	}

	int pocet = 0;
	for(i = 0; i < count; i++){
		if(ps[i].prispevok >= 10000){
			if(pocet == 0){
				cout << "Velke patrony:\n";
				pocet = 1;
			}
			cout << ps[i].meno << " " << ps[i].prispevok << endl;
		}
	}

	pocet = 0;
	for(i = 0; i < count; i++){
		if(ps[i].prispevok < 10000){
			if(pocet == 0){
				cout << "Patrony:\n";
				pocet = 1;
			}
			cout << ps[i].meno << " " << ps[i].prispevok << endl;
		}
	}
	inFile.close();
	system("PAUSE");
}
Nahlásit jako SPAM
IP: 178.253.156.–
kloss
~ Anonymní uživatel
3 příspěvky
21. 7. 2013   #4
-
0
-

#3 Robo
Takže podľa zadania je ten prvý príklad dobre!?
V tom druhom som mal zlý cyklus na čítanie tých hodnôt zo súboru.
Inak v tvojom kóde nemá byť náhodou
prispievatelia *ps = new prispievatelia[count];
namiesto
prispievatelia *ps = new prispievatelia[3];
lebo nevieš dopredu koľko polí máš vytvoriť.
PS: vďaka za tvoju pomoc, ochotu a čas  

Nahlásit jako SPAM
IP: 178.41.127.–
Robo
~ Anonymní uživatel
82 příspěvků
22. 7. 2013   #5
-
0
-

#4 kloss
Hej, v tom prvom príklade to veľké patrony stačí dať pred cyklus a tak isto aj patrony. Je jedno či bude niekto nad 10000 alebo nie, aj tak sa to má vypísať.
A k tomu druhému, ano, má tam byť count. Totiž ja som na načítanie prvého čísla používal príklaz inFile (to isté ako cin), kde mi to načítalo síce prvé číslo, ale neprešlo na druhý riadok, kedže cin znak nového riadku preskakuje. Takže keď som hľadal chybu, tak som si na miesto count zvolil pevné číslo, ale potom som to zabudol vrátiť späť :D 

Nahlásit jako SPAM
IP: 178.253.156.–
kloss
~ Anonymní uživatel
3 příspěvky
26. 7. 2013   #6
-
0
-

#5 Robo
Ok dik

Nahlásit jako SPAM
IP: 178.41.77.–
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, 95 hostů

Podobná vlákna

Chyba v kode, neviem si rady — založil Rastislav

Neviem de mam chybu — založil Trebor

Neviem ako skompilovat do *.jar — založil mienkofax

Moderátoři diskuze

 

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