Názory ke článku C++ - 5. lekce
22. 4. 2005
muzou byt funkce ve strukturach, jako objektech ?
myslim neco jako:
struct moje {
int cislo=0;
int zvetsi(int o_kolik) {
return cislo+okolik;
}
}
volani pak:
moje testik = {1};
cout << moje.zvetsi(10);
2. 5. 2005
Spíše při vytváření bez funkcí, až poté při práci s inicializací proměnných.
25. 9. 2005
Tak z toho co je uvedené v článku nejsem schopen zjistit jak se ukládají data do pole struktur. Poradíte?
22. 12. 2005
Chtěl bych se zeptat jak by se dala celá ta struktura vložit třeba do zřetězeného seznamu? Mějme například struct Osoby a chtěl bych je ukládat do toho seznamu. Jak by se to dalo udělat?
Díky
Zkoušel jsem udělat strukturu osoba s jmenem a mestem. Jmeno i mesto jsem napsal jako pole typu char. Chtěl jsem, aby mohl uživatel jméno i město zadávat sám, ale když do jména napíši více než jedno slovo, program se "poblázní". Čím to může být? Děkuji.
Potřebuji pomoci: Píšu takový malý prográmek v C++ a vytvořil jsem tam fci:
void utok(int alfa, int beta)
{
cout <<beta+nahoda[(* f)];(* f)++;podm(); 1.
neva = beta + nahoda[(* f)]; 2.
(* f)++; 3.
podm(); 4.
cout <<" --> "<<alfa; 5.
alfa = alfa - neva; 6.
cout <<endl;
}
1.napíše číslo s nějakou náhodnou hodnotou (* f)++ je pouze zvýšení čísla protože nahoda je pole typu int o 36 polích a beru vždy další pole z nahoda[36] a podm(); je fce, která hlídá, aby * f nebylo větší než 36
2. nepotřebuje komentář
3. a 4. viz 1.
5. nepotřebuje komentář
6. odečet alfy
zadávaná alfa je součástí struktury a tady je takový malý problém, protože po dokončení funkce utok() nebo při ní se mi nepřepíše!!!, takže když mám podmínku až alfa klesne na nulu. Zkoušel změnit void na int a nic, zkoušel jsem všechny fce na to změnit, nic a když jsem prohodil 5. a 6. tak se mi zapsali změněné hodnoty alfa, ale při dalším opakování děje se nic nestalo !!!
Nevim proč, ale zdá se mi, že v prvních lekcích byly lepší ty příklady, tady jsou vždy jen útržky a je v tom pro mě zmatek.
Nejvíc chápu z příkladů a když je nemůžu zprovoznit, tak mi to moc nejde.
Kdyby jsi měl čas a náladu, tak prosím udělej ty příklady od #include po poslední }
Nedaji se vyplnovat struktury hodnotami nejak hromadne? Treba jako je to ve VisualBasicu:
With STRUKTURA
.x = hodnota 1
.y = hodnota 2
.
.
.
end With
Nevím si rady s tím úkolem nebyl by někdo té lásky a nehodil by ho sem. Díky
21. 12. 2006
ono je sice pekny vedet,jak se vytvori pole struktur,ale jak ty struktury inicializovat a do toho pole vkladat tot otazka druha a onen projek bez toho asi tezko nekdo spichne
Rád přijmu kritiku ;).
#include <iostream>
using namespace std;
struct podnik
{
char jmeno[40];
int vek;
char druh_prace[40];
};
int main()
{
int pocet_zamestnancu;
char ano_ne;
const char ODDELOVAC[] ="\n_____________________________________________\n";
const char SPOLECNOST[] ="AD Company";
cout << "Dobrý den, určete prosím počet zaměstnanců ve společnosti " << SPOLECNOST << "(max. 32000).: ";
cin >> pocet_zamestnancu;
podnik zamestnanec[pocet_zamestnancu];
for(int i=0; i<pocet_zamestnancu ; i++)
{
cout << "\nChcete přidat nového zaměstnance ? (A/N) \n";
cin >> ano_ne;
cin.get();
if(ano_ne == 'A' || ano_ne == 'a'){
cout << "\nJméno a příjmení zaměstnance: \n";
cin.getline(zamestnanec[i].jmeno,40);
cout << "\nVěk zaměstnance: \n";
cin >> zamestnanec[i].vek;
cin.get();
cout << "\nDruh práce zaměstnance: \n";
cin.getline(zamestnanec[i].druh_prace,40);
}
else pocet_zamestnancu = i;
}
cout << "\n\nZaměstnanci(" << pocet_zamestnancu << ") firmy " << SPOLECNOST << ":\n\n";
for(int i=0; i< pocet_zamestnancu; i++)
{
cout << ODDELOVAC << zamestnanec[i].jmeno << "(" << zamestnanec[i].vek << ") \t->\t" << zamestnanec[i].druh_prace << ODDELOVAC;
}}
aha, tak ono mi to na pár místech ,,sežralo" [i] takze to co jsem sem hodil nebude fungovat ... kdyztak na mailu.
zkrátka {i} v hranatych zavorkach, ted si uvedomuju ze je asi pouzivany na formatovani.
Pokud kliknete u příspěvku se zdrojovým kódem na odpovědět, dozbrazí se vám správně.
PHP pole mi ide viac nez v pohode (ved sa mi podarilo vytvorit chat) ale toto nie a nie fungovat. Viem ze to nie je dokoncene ale vzdy mi hodi chybu pri definovani pola (riadok 15 = podnik zamestnanec[i];). Uz som vyskusal vsetky mozne sposoby definicie pola a jej volanie ale nijak mi to neslo. Kde tam je chyba?
Pouzivam VC++ 2005 Express Edition
#include <iostream>
using namespace std;
struct podnik {
int idzam[4]; //cislo zapisu
char meno[30]; //meno zamestnanca
int vek[3]; //vek
char poz[20]; // pozicia
} zamestnanec;
int main()
{
int i,j,v;
char m,p;
cout << "\nZadajte pocet zamestnancov: ";
cin >> i;
podnik zamestnanec[i];
cout << "\nZadajte nasledujuce udaje: ";
for (j=1; j<i; j++){
cout <<"\nZamestnanec cislo : " <<j;
cout <<"\nMeno :";
cin >> m;
cout <<"\nVek :";
cin >> v;
cout <<"\nMeno :";
cin >> p;
podnik.j{j;m;v;p;
}
}
cin.get();
cin.get();
return 0;
}
Vytvoril jsem to, ikdyz je to jeste neupraveny tak nemuzu prijit na to, proc ikdyz i ten program potvrdi, ze promena ano_ne="n" (nechci pridat zamestnance), mi to furt hazi, ze ho pridat chci...
#include <iostream>
using namespace std;
struct clovek
{
char jmeno[20];
short vek;
char druh_prace[20];
} zamestnanci[32000];
int main ()
{
cout << "Kolik chcete pridat zamestnancu (1-32000) ? ";
int a, n=0;
cin >> a;
cin.get();
char ano_ne[]="y";
for (int i=a;i>0;i--)
{
if (ano_ne!="n")
{
cout << "Chcete pridat dalsiho zamestnance (y/n)? ";
cin >> ano_ne;
cin.get();
if (ano_ne!="n")
{
n++;
cout << "Jmeno: ";
cin.getline(zamestnanci[n].jmeno, 20);
cout << "Vek: ";
cin >> zamestnanci[n].vek;
cin.get();
cout << "Druh prace: ";
cin.getline(zamestnanci[n].druh_prace, 20);
};
};
};
for (int i=0;i<=n;i++)
cout << zamestnanci[i].jmeno << " | " << zamestnanci[i].vek << " | " << zamestnanci[i].druh_prace << endl;
}
12. 4. 2007
Brýtro,
mám malý problém a podle příspěvků podemnou asi nejsem jediný.
char ynq[2];
cin >> ynq;
if(ynq == "a")
...
nevím proč ale napisu 'a' a nepusti me to dal
nadruhou stranu kdyz napisu:
char ynq[2];
cin >> ynq;
if(ynq != "n")
...
a napisu 'a' tak me to dal pusti, ale vyskytne se druhy problem, kdyz napisu 'n' tak me to pusti dal taky :)
Takze, cim to muze byt a jak to popr. vyresit? Mohlo by to tim "tajemnym" :P \0 znakem za txt. retezcem ...
Diky za pomoc
Ciao. :) Nedávno jsem se opět začal učit C++ a taky jsem na tenhle problém narazil. :) Nakonec mi až musel poradit kamarád. Řetězce se porovnávají pomocí fce strcmp.
Výpis z jednoho kurzu:
Další užitečnou funkcí je strcmp. Jak jste možná poznali z jejího jména (cmp je zkratka anglického compare), slouží k porovnávání řetězců. Funkce se volá strcmp(první_řetězec, druhý_řetězec), a vrací hodnotu int, která má tento význam: je-li menší než nula, první_řetězec by byl ve slovníku před druhý_řetězec, je-li větší než nula bylo by to naopak, a je-li nula řetězce jsou stejné. Tato funkce má variantu stricmp, která porovnává bez ohledu na velikost písmen (vnitřně převádí všechna písmena na malá).
char str1 = "abcd";
char str2 = "bcde";
int vysledek;
vysledek = strcmp(str1, str2);
cout << vysledek;
// Code tagy jsem použil, abych nějak pěkně označil citaci, tak nekamenovat. :D
19. 4. 2007
#include <iostream>
using namespace std;
struct osoby
{
char jmeno[20];
int vek;
} pracujici[32000];
int main()
{
int pocet;
cout << "Prosim zadejte pocet zamestnancu: ";
cin >> pocet;
cin.get();
int i;
for (i=0; i<pocet; i++)
{
cout << "Prosim zadejte jmeno " << (i+1) << ". zamestnance: ";
cin.getline(pracujici[i].jmeno, 20);
cout << "Prosim zadejte vek " << (i+1) << ". zamestnance: ";
cin >> pracujici[i].vek;
cin.get();
};
char ynqt[2]="a";
char ynq[2];
cout << "\a\nChcete pridat jeste nejakeho zamestnance? (a/n)\n";
cin >> ynq;
cin.get();
do
{
cout << "Prosim zadejte jmeno " << (i+1) << ". zamestnance: ";
cin.getline(pracujici[i].jmeno, 20);
cout << "Prosim zadejte vek " << (i+1) << ". zamestnance: ";
cin >> pracujici[i].vek;
cin.get();
i++;
cout << "\a\nChcete pridat jeste nejakeho zamestnance? (a/n)\n";
cin >> ynq;
cin.get();
}
while (stricmp(ynq, ynqt) == 0);
cout << "\n\n\n Vypisuji seznam zamestnancu \n\n";
cout << "\tporadi\tjmeno\tvek\n\n";
int a;
for(a=0; a<i; a++)
{
cout << "\t|" << a+1 << "\t\b\b| " << pracujici[a].jmeno << "\t" << pracujici[a].vek << "\n";
}
cin.get();
return 0;
}
Zdravim
Tak jako vesechno super ale jakmile dam napr:
jmeno: tomas jedno
Jakmile tam dam tu mezeru mezi slovy tak se to ukonci cely...
nevite cim to muze byt??
Diky za odpoved
1. 7. 2007
Mám stejný problém.
Používám:
cin >> zamestnanec[i].jmeno;
Pokud tam dám:
cin.get(zamestnanec[i].jmeno, 21);
utíká mi to a nečeká na odpověď.
cin.clear();
cin.get();
na to nepomáhá.
Poraďte prosím, kde děláme chybu.
if (ano_ne!="n")
Táto podmienka je nefunkčná! Chyba je v úvodzovkách.
Namiestu [i]" "[/i], treba použiť [i]' '[/i] :
if (ano_ne!='n')
musite tam dat ne cin.get() ale cin.getline(p1,p2)
RADA od programatora C++ 2 hodiny stareho =D
20. 8. 2007
Hele fakt nemuzu zjistit v cem mam chybu...rekni mi Curo prosim
:
#include <cstdlib>
#include <iostream>
using namespace std;
struct podnik
{
char jmeno[20];
int vek;
char prace[20];
};
int main(int argc, char *argv[])
{
cout << "\n______________________________";
cout << "\n________Pisky corp.___________";
cout << "\n______________________________";
int pocet;
char ano_ne;
char ODDELOVAC[] ="\n_____________________________________________\n";
cout << "\nDobry den, urcete prosim pocet zamestnancu: ";
cin >> pocet;
podnik osoba[pocet];
for (int i=0;i<pocet;i++)
{
cout << "\nChcete pridat noveho zamestnance? (A/N) ";
cin >> ano_ne;
cin.get();
if(ano_ne == 'A' || ano_ne == 'a')
{
cout << "\nZadejte jmeno a prijmeni zamestnance prosim: ";
cin >> osoba.jmeno;
cin.get();
cout << "\nZadejte vek prosim: ";
cin >> osoba.vek;
cin.get();
cout << "\nZadejte druh prace prosim: ";
cin >> osoba.prace;
else
cout << "\nPocet zamestnancu: " <<i<<;
}
cout << "\n\nZaměstnanci(" << pocet << ") firmy Pisky corp.":\n\n";
for(int i=0; i<pocet; i++)
{
cout << ODDELOVAC << osoba.jmeno << "(" << osoba.vek << ") \t->\t" << osoba.prace << ODDELOVAC;
return 0;
}
#include <cstdlib>
#include <iostream>
using namespace std;
struct podnik
{
char jmeno[20];
int vek;
char prace[20];
};
int main(int argc, char *argv[])
{
cout << "\n______________________________";
cout << "\n________Pisky corp.___________";
cout << "\n______________________________";
int pocet;
char ano_ne;
char ODDELOVAC[] ="\n_____________________________________________\n";
cout << "\nDobry den, urcete prosim pocet zamestnancu: ";
cin >> pocet;
podnik osoba[pocet];
[i]int pocet_zamestnancov=0;[/i]
for (int j=0;j<pocet;j++) // radsej zmenime nazov premennej na j ;)
{
cout << "\nChcete pridat noveho zamestnance? (A/N) ";
cin >> ano_ne;
cin.get();
if(ano_ne == 'A' || ano_ne == 'a')
{
[i]pocet_zamestnancov++;[/i]
cout << "\nZadejte jmeno a prijmeni zamestnance prosim: ";
cin.get(osoba[i][j][/i].jmeno,20); //chyba
cout << "\nZadejte vek prosim: ";
cin >> osoba[i][j][/i].vek; //chyba
cin.get();
cout << "\nZadejte druh prace prosim: ";
cin.get(osoba[i][j][/i].prace,20); //chyba
} //chyba
else
cout << "\nPocet zamestnancu: " <<[i]pocet_zamestnancov[/i]; //chyba
break;//chyba
}//chyba
[i]if([i]pocet_zamestnancov[/i]!=0)//pre lepsiu prehladnost vo vystupe
{[/i]
cout << "\n\nZame(stnanci(" << pocet << ") firmy Pisky corp. [i]:[/i]\n\n"; //chyba
for(int [i]j[/i]=0; [i]j[/i]<[i]pocet_zamestnancov[/i]; [i]j[/i]++) // radsej zmenime nazov premennej na j + chyba
{
cout << ODDELOVAC << osoba[j].jmeno << "(" << osoba[j].vek << ") \t->\t" << osoba[i][j][/i].prace << ODDELOVAC; //chyba
} //chyba
[i]}[/i]
[i]cin.get();
cin.get();[/i]
return 0;
}
Prejdi si ešte raz všetky lekcie. ;)
25. 9. 2007
Zdravím,
jsem začínající programátor C++ (teprve dneska jsem se to zacal ucit) :-)
Vypracoval jsem si vsechny ukoly, ale mel bych otazku ohledne tohodle ukolu. Mam tenhle kod:
#include <iostream>
struct zamestnanci
{
char jmeno[51];
char vek[4];
char prace[51];
};
int main()
{
int menu=0;
int smycka=1;
int pocet=0;
int dalsi;
int pocet_zamestnancu;
const char oddelovac[] ="\n_____________________________________________\n";
const char firma[] ="Vzorova firma";
std::cout<<"Vitejte v evidenci zamestnancu Vasi firmy.\n"<<oddelovac;
std::cout<<"\nZadejte nyni pocet zamestnancu: ";
std::cin>>pocet_zamestnancu;
std::cout<<"\n\n";
zamestnanci zamestnanec[pocet_zamestnancu];
while(smycka == 1)
{
if(menu == 0)
{
std::cout<<"\n\nNyni je v seznamu: "<<pocet<<" zamestnancu\n"<<oddelovac<<"\n";
std::cout<<"Zvolte si, co chcete delat:\n\n";
std::cout<<"[1] Pridani noveho zamestnance\n";
std::cout<<"[2] Vypis vsech zamestnancu\n";
std::cout<<"[3] Navyseni poctu zamestnancu\n"<<oddelovac;
std::cout<<"\nSem zadejte svou volbu: ";
std::cin>>menu;
std::cin.get();
}
if(menu == 1)
{
if(pocet != pocet_zamestnancu)
{
std::cout<<"\nZadejte jmeno zamestnance: \n";
std::cin.getline(zamestnanec[pocet].jmeno,51);
//std::cin.get();
std::cout<<"\nZadejte vek zamestnance: \n";
std::cin.getline(zamestnanec[pocet].vek,4);
//std::cin.get();
std::cout<<"\nZadejte pozici zamestnance: \n";
std::cin.getline(zamestnanec[pocet].prace,51);
//std::cin.get();
pocet++;
menu=0;
}
else
{
std::cout<<oddelovac<<"\nPokousite se zadat zamestnance nad zadany pocet.\n";
system("PAUSE");
menu=0;
}
}
if(menu == 2)
{
smycka=0;
}
if(menu == 3)
{
int novy_pocet;
std::cout<<"\nZadejte novy pocet zamestnancu: ";
std::cin>>novy_pocet;
int novy=(novy_pocet - pocet_zamestnancu);
zamestnanci zamestnanec[novy];
pocet_zamestnancu=novy_pocet;
menu=0;
}
}
std::cout<<"\n\nZamestnanci firmy "<<firma<<"\n\nPocet zamestnancu:"<<pocet<<oddelovac;
int a;
for(a=0;a<pocet_zamestnancu;a++)
{
std::cout<<oddelovac<<zamestnanec[a].jmeno<<"\n"<<zamestnanec[a].vek<<"\n"<<zamestnanec[a].prace<<oddelovac;
}
std::cout<<"\n\nDekujeme za pouziti naseho softwaru\n\n";
system("PAUSE");
}
Použil jsem některé části z příkladu, přesněji jsem si to přečetl, a pak podle toho vytvořil svůj program, ale potřeboval bych nějakou funkci, kterou bych vyčistil obrazovku tak, aby zmizel starý text. Jde to nějak??
Díky moc za rady.
Dragon
25. 9. 2007
A kdyby jste náhodou našly nějaké chyby a já předpokládám, že najdete, napiště mi je prosím.
Díky ještě jednou.
Dragon
6. 11. 2007
Zdravím všechny. Co se týká programování, nejsem úplný začátečník. Zvládám slušně ASP, JAVU, VBScipt, SQL a pak ještě něco málo, ale u C++ jsem se setkal s věcí, která mne velice překvapila, dokonce snad vyděsila. Nedokážu si totiž své programování v tomto jazyce bez vyřešení tohoto vůbec představit. Pokud chci vytvořit nějaké pole třeba typu int, nemohu mu jako velikost předat parametr. Ať už pri volání metody, nebo přímo v main. Překládač mi pokaždé vypíše chybu, že nemůže vytvořit pole o neznámé velikosti. Ona sice je teď neznámá, ale při běhu programu, bude nutnost ji zadat. Myslím třeba tento příklad:
int index;
cin >> index;
int pole[index];
Nemůže být chyba pouze na mém překládači? Jelikož tř. echo112 používá taky vytvoření pole pomocí proměnné:
cin >> pocet;
podnik osoba[pocet];
I když pomocí struktůry, výsledek je stejný. Za každou radu budu vděčný a předem díky.
Jinak děkuji autorům, moc fajn seriál ;-)
23. 2. 2008
zdravim . neviete kde moze byt chyba ? ked dam vypisat clovek[1].vek tak mi hodi blbost totalnu. diky moc
#include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
struct zamestnanci { char meno[20]; float vek; char praca[20]; };
int main()
{
int i, j;
cout << "zadaj kolko bude zamestnancov: ";
cin >> i; cout << "\n";
zamestnanci clovek[i];
for (j=1; j != (i+1); j++)
{
zamestnanci clovek[j];
cout << "meno: "; cin >> clovek[j].meno ;
cout << "vek: "; cin >> clovek[j].vek;
cout << "praca: "; cin >> clovek[j].praca;
cout << "\n";
}
cout << clovek[1].vek;
cin.get();
cin.get();
return 0;
}
Ahoj..:-)
Jen bych upozornil na chybku v příkladě pod nadpisem : Řádkově orientovaný vstup: getline() a get() - máš tam </iostream> , které tam nepatří...
No a pak ještě jedna faktická poznámka... rýže není luštěnina, ale obilnina...
8. 4. 2008
Reagoval na komentář od uživatele belisar :
ty vole a nemas to jedno?...éshoul
14. 6. 2008
Reagoval na komentář od uživatele Robert :
Chyba na tvem prekladaci urcite neni. Pokud se tvori pole, jehoz velikost zjistujes az v prubehu programu, musis toto pole alokovat dynamicky. To v clanku zatim zmineno nebylo, tak nevim, proc se to zada v ukolu. V C++ ti pomuze operator NEW: int pole = new int[index]; //to vytvori pole velikosti danou promenou index, kterou nacitas v prubehu programu. V obycejnem C jde o funkci malloc, ale je trochu tezsi: pole musi byt ukazatel: int *pole; pole = (int *) malloc (index* sizeof (int)); . Doporucuju kouknout jeste nekam do knizky nebo jinam na web. Jeste jedna vec: C a C++ nema narozdil od Javy Garbage Collector, to znamena, ze vsechno, co alokujes dynamicky, musis taky odalokovat. U new je to potom delete [] pole; . U malloc je to free(pole);
14. 6. 2008
Reagoval na komentář od uživatele Robert :
Chyba na tvem prekladaci urcite neni. Pokud se tvori pole, jehoz velikost zjistujes az v prubehu programu, musis toto pole alokovat dynamicky. To v clanku zatim zmineno nebylo, tak nevim, proc se to zada v ukolu. V C++ ti pomuze operator NEW: int pole = new int[index]; //to vytvori pole velikosti danou promenou index, kterou nacitas v prubehu programu. V obycejnem C jde o funkci malloc, ale je trochu tezsi: pole musi byt ukazatel: int *pole; pole = (int *) malloc (index* sizeof (int)); . Doporucuju kouknout jeste nekam do knizky nebo jinam na web. Jeste jedna vec: C a C++ nema narozdil od Javy Garbage Collector, to znamena, ze vsechno, co alokujes dynamicky, musis taky odalokovat. U new je to potom delete [] pole; . U malloc je to free(pole);
14. 6. 2008
Jo a tady mam jeste chybu, i u NEW musi byt pole ukazetel typu int (chybi mi tam hvezdicka): int *pole = new int[index];
Reagoval na komentář od uživatele Jiří Hlaváček :
urob to takhle:
cin.getline(osoba.jmeno, 20 alebo nejaké jiné číslo);
Reagoval na komentář od uživatele filczek :
urob to pomocou cin.getline();
napr:
char X[5];
cin.getline(X, 5); //uloží prvních 5 znaků rádka do premennej X
1. 11. 2008
Reagoval na komentář od uživatele mayoxy :
Pomoc PLS -
tuna to posielam opravene, uz len dorobit cyklus pre vypis
okrem toho ze miesas ciselny a textovy vstup v cykle je hlavna chyba v tom ze v cykle znovu definujes pole pricom jeho dlzka sa meni tak ako sa v cykle meni premenna j.
#include<iostream>
#include<cstring>
using namespace std;
struct zamestnanci { char meno[20]; unsigned short vek; char praca[20]; };
int main()
{
int i;
cout << "zadaj kolko bude zamestnancov: ";
cin >> i;cin.get(); cout << endl;
zamestnanci clovek[i];
for (int j=1; j != (i+1); j++)
{
cout << "meno: "; cin.getline(clovek[j].meno, 20) ;
cout << "vek: "; cin >> clovek[j].vek; cin.get();
cout << "praca: "; cin.getline(clovek[j].praca, 20);
cout << "\n";
}
cout << clovek[1].meno <<"\t" <<clovek[1].vek <<"\t" <<clovek[1].praca <<"\n";
cin.get();
return 0;
Nevíte kde je chyba?
#include <iostream>
#include <cstring>
using namespace std;
struct zamestnanci {
char jmeno[20];
int vek;
char zamereni[50];
}
int main()
cout << "Zadej,kolik bude zamestnancu : ";
int zamestnanci;
cin >> zamestnanci;
zamestnanci osoba[zamestnanci];
for (int pocet=1;pocet!=(zamestnanci+1); zamestnanci++)
{
cout << "Jmeno : "; cin >> clovek[pocet].jmeno ;
cout << "Vek : "; cin >> clovek[pocet].vek;
cout << "Zamereni : "; cin >> clovek[pocet].zamereni;
cout << "\n";
}
for (int serazeni=1;serazeni!=(zamestnanci+1); serazeni++)
{
cout << clovek[serazeni].jmeno <<"\t"<< clovek[serazeni].vek <<"\t"<< clovek[serazeni].zamereni <<"\n";
}
cin.get();
cin.get();
return 0;
24. 5. 2009
Vidím, že to tu některým furt nejde...mněl sem taky problém, ale podařilo se vyřešit a tak vám sem dám ukázku toho, jak sem to udělal já...
#include <iostream>
using namespace std;
struct Firma
{
char Jmeno[32];
int Vek;
char Druh[32];
} Zamestnanec[32000];
int main()
{
char smajlik=2;
cout << "Vitejte ve Sprave zamestnancu firmy !";
cout << "\n\nTento program slouzi ke sprave zamestnancu ve firme.Autorem tohoto";
cout << "\nprogramu je Filip Suchy. Po zadani udaju se vam automaticky zobrazi";
cout << "\nkompletni vypis udaju " << smajlik;
cout << "\n\nPockejte prosim, nez se spusti pruvodce...";
cout << "\n\n\nVITEJTE V PRUVODCI !";
char Firma[125];
cout << "\n\nZadejte nazev firmy: ";
cin.getline(Firma,125);
int PocetZ;
cout << "\nZadejte pocet zamestnancu (Max. 32 000): ";
cin >> PocetZ;
for(int i=1;i<PocetZ+1;i++)
{
char Continue;
cout << "\n\nChces pridat dalsiho zamestnance ? (A/N): ";
cin >> Continue;
if(Continue == 'A' || Continue == 'a')
{
cout << "\nZadejte jmeno " << i << ". zamestnance: ";
cin.get();
cin.getline(Zamestnanec[i].Jmeno,32);
cout << "\nZadejte vek " << i << ". zamestnance: ";
cin >> Zamestnanec[i].Vek;
cout << "\nZadejte Druh prace " << i << ". zamestnance: ";
cin.get();
cin.getline(Zamestnanec[i].Druh,32);
}
else
{
PocetZ = i-1;
}
}
int PoradiZ = 1;
cout << "\n\nVYPIS ZAMESTNANCU FIRMY " << Firma;
cout << "\n\n\tPORADI\tJMENO\tVEK\tDRUH PRACE";
cout << "\n\t----------------------------------";
for(PocetZ;PocetZ>0;PocetZ--)
{
cout << "\n\t" << PoradiZ << "." << "\t" << Zamestnanec[PoradiZ].Jmeno << "\t" << Zamestnanec[PoradiZ].Vek << "\t" << Zamestnanec[PoradiZ].Druh;
PoradiZ++;
}
cout << "\n\n";
system("PAUSE");
return 0;
}
#include <iostream> //1
//2
using namespace std; //3
int main() //4
{ //5
cout << "Zadaj pocet zamestnancov!
"; //6
int pocet; //7
cin >> pocet; //8
cin.get(); //9
struct zamestnanci //10
{ //11
char meno[15]; //12
int vek; //13
char mesto[15]; //14
} osoba[32000]; //15
char pokr[2]; //16
int i; //17
for(i=0;i<pocet;i++) //18
{
cout << "
Zadaj meno " << i+1 << ". zamestnanca! (menej nez 15 znakov)
"; //20
cin >> osoba[i].meno; //21
cout << "Zadaj jeho vek!
"; //22
cin >> osoba[i].vek; //23
cout << "Zadaj jeho mesto! (menej nez 15 znakov)
"; //24
cin >> osoba[i].mesto; //25
cout << "
Chcete pokracovat? A/N
"; //26
cin.get(pokr, 1); //27
if(pokr == "n" || pokr == "N") //28
pocet = i; //29
}
cout << endl << endl << " Zamestnanci" << endl; //31
for(i=0;i<pocet;i++) //32
{
cout << "Zamestnanec cislo " << i+1 << " - " << osoba[i].meno << endl; //34
cout << "Vek: " << osoba[i].vek << endl; //35
cout << "Mesto: " << osoba[i].mesto << endl << endl;
}
return 0;
}
Už to mám vyriešené...
Ahoj, učím se programovat v C++ zatím pomocí tohoto seriálu a mám pár dotazů:
1. K úkolu v 5. lekci - když vytvořím pole struktur zaměstnanců...
Nechám uživatele vložit věk a plat, to jde v pohodě, ale u jména mně to píše problémy s char: (zjednodušeně)
char jmeno[10];
cin >> jmeno;
zamestnanci[0].jmeno = jmeno;
=> ISO C++ forbids assignment of arrays
- případně při změně " char jmeno[10] " na " char jmeno[] = ""; "
=> incompatible types in assingment of "char[1]" to "char[10]"
- zkoušel jsem s tím všechno možný, ale nějak to nefunguje
2. Jak by se dal založit nový zaměstnanec - ne přes pole struktur, ale přimo třeba zaměstnanec1, zaměstnanec2,...?
Zkoušel jsem to přes funkce, ale taky to nešlapalo
3. Když jsem udělal jednoduchý program na napsání zadaného textu pozpátku, vše fungovalo kromě toho, když je v textu znak mezerníku
buď se text vypíše jen po mezerní a zbytek už ne
nebo se program jednoduše zavře
(bylo to pro kamose www.acko.yc.cz/otoceniTextu.exe
Jestli si někdo najde chvilku času na zodpovězení těchto pravděpodobně primitivních problémů, budu mu velice vděčný. Díky
21. 10. 2009
Hotovo. Naprogramoval jsem celkem dostačující "blbu-vzdornost" uživatele programu, přes 200 řádků celkem přehlednýho kódu a hlavně výpočty délky znaků hodnot aby se nerozpadala tabulka na výpis.. Musím si to pochválit.. :D Dělal jsem to 4 hodinky, taková flákárnička.. Nutno dodat, že jsem se řídil lekcemi 1-5, takže to co jsem tu četl že někdo nemohl dát, tak ho musím vyvést z omylu. Všechno co mám v programu je tu popsané, ale na některý postupy musíte prostě přijít samy, nedá se nic dělat. Většinu věcí jsem složil z cyklů for, if a while.. Na začátku mám specifikovaný proměný pro český znaky a taky znaky rámu tabulek podle znakový sady DOSu. Otázka přerušení je celkem jednoduchá, sbíram hodnoty z proměné typu char a ty následně porovnávám se znaky z tabulky znaků, na kterou jste si měli napsat program v testu (viz. předešlé lekce).
Zajímá mě, jaký máte na to názor:
#include <cstdlib>
#include <iostream>
using namespace std;
struct zamestnanec
{
char jmeno[50];
int vek;
char druh_prace[70];
};
int main(int argc, char *argv[])
{
//cz znaky
char s3=231;
char e3=216;
char e13=183;
char c3=159;
char c13=172;
char d3=212;
char t3=156;
char n3=229;
char r3=253;
char z3=167;
char a2=160;
char e2=130;
char i2=161;
char o2=162;
char u2=163;
char u4=133;
char y2=236;
//znaky rámu
char L1=201;
char L2=187;
char L3=200;
char L4=188;
char lh=205;
char lv=186;
char x1=204;
char x2=185;
char x3=202;
char x4=203;
char xx=206;
char lh1=22;
char st=127;
char cube1=176;
char cube2=177;
char cube3=178;
char cube4=219;
//ostatní proměné
int x; int y; int z;
const int max_x=24792; //24792 - mě víc zadat nešlo..????
int delka_x; int delka_y; int delka_z;
int delka_jmeno; int delka_vek; int delka_druh_prace;
int izam; int jzam=0;
int cara; int rm;
int table_pause;
cout <<"Program evidence zam"<<e3<<"stnanc"<<u4<<" spole"<<c3<<"nosti Wl"<<c3<<i2<<" K"<<u4<<z3<<"e s.r.o.\n";
for (cara=0; cara<80; cara++) cout <<"="; cout <<"\n";
cout <<"Zadejte po"<<c3<<"et zam"<<e3<<"stnanc"<<u4<<" (max."<<max_x<<"): ";
cin >>x; cin.clear();
while(x>max_x)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n\nZadejte po"<<c3<<"et zam"<<e3<<"stnanc"<<u4<<" (max."<<max_x<<"): "; cin.get(); cin >>x; cin.clear();
}
if (x==0) { cout <<"Nem"<<a2<<"te "<<z3<<a2<<"dn"<<e2<<" zam"<<e3<<"stnance. Kon"<<c3<<i2<<"m.\n"; system("PAUSE"); return EXIT_SUCCESS;}
zamestnanec cislozam[x+1]; //o 1 větší hodnota mi zajistila správný záznam poslední hodnoty
y=1;
for (z=0; z<100000; z*=10)
{
if (z==0)
{
z++;
if (x>=0 && x<10) delka_x=1;
}
if (x>=z && x<z*10) delka_x=y;
y++;
}
for (cara=0; cara<28+delka_x; cara++) cout <<"-"; cout <<"\n";
cout <<"Dobr"<<a2<<", m"<<a2<<"te "<<x;
if (x<5) cout <<" zam"<<e3<<"stnance"; else cout <<" zam"<<e3<<"stnanc"<<u4;
cout << ". Beru na v"<<e3<<"dom"<<i2<<".\n\n\n"<<"Nyn"<<i2<<" zad"<<a2<<"vejte jm"<<e2<<"no, v"<<e3<<"k, pohlav"<<i2<<" a druh vykon"<<a2<<"van"<<e2<<" pr"<<a2<<"ce zam"<<e3<<"stnanc"<<u4<<":\n";
for (cara=0; cara<72; cara++) cout <<"-"; cout <<"\n";
//zjišťování informací o zaměstnancích, zápis do struktur, formátování textu
for (izam=1; izam<=x; izam++)
{
//subcyklus výpočtu délky hodnoty "izam"
y=1;
for (z=0; z<100000000; z*=10)
{
if (z==0)
{
z++;
if (izam>=0 && izam<10) delka_y=1;
}
if (izam>=z && izam<z*10) delka_y=y;
y++;
}
//vkládání dat do srkuktur
cout <<"\nZam"<<e3<<"stnanec #: "; for (cara=0; cara<delka_x-delka_y; cara++) cout <<" "; cout <<izam<<"/"<<x<<"\n";
for (cara=0; cara<17+delka_x+delka_x; cara++) cout <<"-"; cout <<"\n";
cout <<"Jm"<<e2<<"no a P"<<r3<<i2<<"jmen"<<i2<<": "; cin.get(); cin.get(cislozam[izam].jmeno, 50); cin.clear();
while(strlen(cislozam[izam].jmeno)>23)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n\nJm"<<e2<<"no a P"<<r3<<i2<<"jmen"<<i2<<": "; cin.get(); cin.get(cislozam[izam].jmeno, 50); cin.clear();
}
cout <<"V"<<e3<<"k (0-100) : "; cin >> cislozam[izam].vek; cin.clear();
while(cislozam[izam].vek>100)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n\nV"<<e3<<"k (0-100) : "; cin.get(); cin >> cislozam[izam].vek; cin.clear();
}
cout <<"P"<<r3<<"id"<<e3<<"len"<<a2<<" pr"<<a2<<"ce : "; cin.get(); cin.get(cislozam[izam].druh_prace, 70); cin.clear();
while(strlen(cislozam[izam].druh_prace)>36)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n\nP"<<r3<<"id"<<e3<<"len"<<a2<<" pr"<<a2<<"ce : "; cin.get(); cin.get(cislozam[izam].druh_prace, 70); cin.clear();
}
/*
Všiměte si, že jsem u char jmeno a druh_prace zvolil hodnoty počtu znaků záměrně vyšší.
Je to proto, aby to bylo částečně "blbu-vzdorný" a aby většinu "přešlehnutýho textu"
zachytil cyklus while jakožto "neplatné zadání".
U jména a druh_prace je cin.get(); cin.get(cislozam[izam].....); cin.clear();
Co si budem povádat, díky tomu to nedělá kraviny. U int vek už je to podobně,
jenom se hodnota nevkládá pomocí cin.get, ale jenom cin >> ...
*/
if (izam<x) //subcyklus přerušení vkládání
{
char pokracuj;
cout <<"\nP"<<r3<<"ejete si pokra"<<c3<<"ovat [a/n]? "; cin >>pokracuj;
while(pokracuj!=65 && pokracuj!=97 && pokracuj!=78 && pokracuj!=110)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n";
cout <<"\nP"<<r3<<"ejete si pokra"<<c3<<"ovat [a/n]? "; cin >>pokracuj;
}
if (pokracuj==78 || pokracuj==110)
{
izam++;
goto vypis;
}
// if (pokracuj==65 || pokracuj==97); //není potřeba, ale může být použito (co se stane když zadáte "a" nebo "A")
}
}
//volání a výpis dat ze struktur, tabulka
vypis:
cout <<endl<<L1; for (rm=0; rm<78; rm++) cout <<lh; cout <<L2;
cout <<lv<<" Zam"<<e3<<"stnanci spole"<<c3<<"nosti Wl"<<c3<<i2<<" K"<<u4<<z3<<"e s.r.o."; for (rm=0; rm<37; rm++) cout <<" "; cout <<lv;
cout <<x1; for (rm=0; rm<7; rm++) cout <<lh; cout <<x4; for (rm=0; rm<25; rm++) cout <<lh; cout <<x4; for (rm=0; rm<5; rm++) cout <<lh; cout <<x4; for (rm=0; rm<38; rm++) cout <<lh; cout <<x2;
cout <<lv<<" "<<c3<<i2<<"slo "<<lv<<" jm"<<e2<<"no a p"<<r3<<i2<<"jmen"<<i2<<" "<<lv<<" v"<<e3<<"k "<<lv<<" druh pr"<<a2<<"ce "; cout <<lv;
cout <<x1; for (rm=0; rm<7; rm++) cout <<lh; cout <<xx; for (rm=0; rm<25; rm++) cout <<lh; cout <<xx; for (rm=0; rm<5; rm++) cout <<lh; cout <<xx; for (rm=0; rm<38; rm++) cout <<lh; cout <<x2;
for (jzam=1; jzam<izam; jzam++) //HLAVÍ CYKLUS VÝPISU HODNOT DO TABULEK
{
y=1;
for (z=0; z<100000000; z*=10) //subcyklus výpočtu délky hodnoty "jzam"
{
if (z==0)
{
z++;
if (jzam>=0 && jzam<10) delka_z=1;
}
if (jzam>=z && jzam<z*10) delka_z=y;
y++;
}
delka_jmeno = strlen(cislozam[jzam].jmeno); //výpočet délky hodnoty "cislozam[jzam].jmeno"
y=1;
for (z=0; z<100000000; z*=10) //výpočet délky hodnoty "cislozam[jzam].vek"
{
if (z==0)
{
z++;
if (cislozam[jzam].vek>=0 && cislozam[jzam].vek<10) delka_vek=1;
}
if (cislozam[jzam].vek>=z && cislozam[jzam].vek<z*10) delka_vek=y;
y++;
}
delka_druh_prace = strlen(cislozam[jzam].druh_prace); //výpočet délky hodnoty "cislozam[jzam].druh_prace"
cout <<lv; for (rm=0; rm<6-delka_z; rm++) cout <<" "; cout <<jzam<<" "; //volání a výpis dat ze struktur a formátování tabulky
cout <<lv<<" "<<cislozam[jzam].jmeno; for (rm=0; rm<24-delka_jmeno; rm++) cout <<" ";
cout <<lv; for (rm=0; rm<4-delka_vek; rm++) cout <<" "; cout <<cislozam[jzam].vek<<" ";
cout <<lv<<" "<<cislozam[jzam].druh_prace; for (rm=0; rm<37-delka_druh_prace; rm++) cout <<" "; cout <<lv;
for (table_pause=18; table_pause<max_x; table_pause+=20) //pozastavení a formátování konce tabulky
{
if (jzam==table_pause)
{
cout <<L3; for (rm=0; rm<7; rm++) cout <<lh; cout <<x3; for (rm=0; rm<25; rm++) cout <<lh; cout <<x3; for (rm=0; rm<5; rm++) cout <<lh; cout <<x3; for (rm=0; rm<38; rm++) cout <<lh; cout <<L4;
if (jzam<izam)
{
char pokracuj;
cout <<"P"<<r3<<"ejete si pokra"<<c3<<"ovat [a/n]? "; cin.get(); cin >>pokracuj; cin.clear();
while(pokracuj!=65 && pokracuj!=97 && pokracuj!=78 && pokracuj!=110) //ověření správnosti zadání
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n";
cout <<"\nP"<<r3<<"ejete si pokra"<<c3<<"ovat [a/n]? "; cin.get(); cin >>pokracuj; cin.clear();
}
if (pokracuj==78 || pokracuj==110) goto exit; //zadání hodnoty "n" nebo "N"
// if (pokracuj==65 || pokracuj==97); //není potřeba, ale může být použito (co se stane když zadáte "a" nebo "A")
}
cout <<L1; for (rm=0; rm<7; rm++) cout <<lh; cout <<x4; for (rm=0; rm<25; rm++) cout <<lh; cout <<x4; for (rm=0; rm<5; rm++) cout <<lh; cout <<x4; for (rm=0; rm<38; rm++) cout <<lh; cout <<L2;
cout <<lv<<" "<<c3<<i2<<"slo "<<lv<<" jm"<<e2<<"no a p"<<r3<<i2<<"jmen"<<i2<<" "<<lv<<" v"<<e3<<"k "<<lv<<" druh pr"<<a2<<"ce "; cout <<lv;
cout <<x1; for (rm=0; rm<7; rm++) cout <<lh; cout <<xx; for (rm=0; rm<25; rm++) cout <<lh; cout <<xx; for (rm=0; rm<5; rm++) cout <<lh; cout <<xx; for (rm=0; rm<38; rm++) cout <<lh; cout <<x2;
}
}
}
cout <<L3; for (rm=0; rm<7; rm++) cout <<lh; cout <<x3; for (rm=0; rm<25; rm++) cout <<lh; cout <<x3; for (rm=0; rm<5; rm++) cout <<lh; cout <<x3; for (rm=0; rm<38; rm++) cout <<lh; cout <<L4;
exit:
if (izam<18) for (cara=0; cara<17-izam; cara++) cout <<endl;
cout <<"\nProgram by Wlk Wlezley (c)2009\n";
system("PAUSE");
return EXIT_SUCCESS;
}
Jen snad jedinej problém se oběvil. Nemůžu zadat hodnotu x větší, než mám uvedeno v const max_x (měnil jsem to tolikrát, že jsem si na to udělal konstantu, super věc).. max_x je taková ochrana před tím aby to nezkolabovalo. Když tam dám hodnotu max_x=32000, dosadí to hodnoty tam kam má, to je v pořádku, program se zkompiluje v pohodě. Jenže při zadávání vyšší hodnoty se program ukončí aniž by cokoliv vykonal. Ehm, takže jak na to? Jak udělat, aby hodnota int mohla být 32000? Používam wxDev-C++ 7. Díky za rady..
e-mail: wwlkodlak(zavinaC++)seznam.cz
21. 10. 2009
Tak jsem přišel na chybu. Je to jednoduché. Struktura má nejspíš omezený počet bitů, čili takový rozsah znaků do ní asi nenacpu. mám tam char 50+70 znaků a k tomu int. Takže úkol asi udělat půjde, ale jinak než do jedný struktury to asi nepůjde (s tím co jsem si přečetl v článku..)
upravil jsem to trochu:
struct zamestnanec
{
char jmeno[45];
int vek;
char druh_prace[60];
};
dál změna na řádku 54:
const int max_x=18592; //18592 - víc prostě nejde..
a nakonec změny v rozsahu řádků 108 - 121:
cout <<"Jm"<<e2<<"no a P"<<r3<<i2<<"jmen"<<i2<<": "; cin.get(); cin.get(cislozam[izam].jmeno, 45); cin.clear();
while(strlen(cislozam[izam].jmeno)>23)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n\nJm"<<e2<<"no a P"<<r3<<i2<<"jmen"<<i2<<": "; cin.get(); cin.get(cislozam[izam].jmeno, 50); cin.clear();
}
cout <<"V"<<e3<<"k (0-100) : "; cin >> cislozam[izam].vek; cin.clear();
while(cislozam[izam].vek>100)
{
cout <<"Neplatn"<<e2<<" zad"<<a2<<"n"<<i2<<"!\n\nV"<<e3<<"k (0-100) : "; cin.get(); cin >> cislozam[izam].vek; cin.clear();
}
cout <<"P"<<r3<<"id"<<e3<<"len"<<a2<<" pr"<<a2<<"ce : "; cin.get(); cin.get(cislozam[izam].druh_prace, 60); cin.clear();
while(strlen(cislozam[izam].druh_prace)>36)
Jestli někdo ví, jak zvětšit počet záznamů ve struktuře aniž bych musel hrábnout na délku znaků proměných "char", tak na to jsem opravdu zvědavej.. :smile1:
21. 10. 2009
Ještě malá moucha na řádku 65:
while(x>max_x || x<0)
To je proto, aby to nezkolabovalo při zadání záporné hodnoty.. :)
21. 10. 2009
Chyba v podtržení, řádek 82:
for (cara=0; cara<40+delka_x; cara++) cout <<"-"; cout <<"\n";
#include<iostream>
#include<conio.h>
using namespace std;
struct firma
{
char meno[50];
int vek;
char praca[50];
};
int main()
{
int x;
char f[50];
cout << "Zadajte nazov firmy: ";
cin.getline(f,50);
cout << "\nZadajte pocet zamestnancov : ";
cin >> x;
firma zamestnanec[x];
char ano_nie;
int i;
char ciara(50);
ciara='_______________________________';
for(i=1; i<x+1; i++)
{
cout << "Chcete pridat zamestnanca? A/N?";
cin >> ano_nie;
cout <<"\n";
if (ano_nie=='A'||ano_nie=='a')
{
cout << i<< ".zamestnanec...\n";
cout << "Zadajte meno zamestnanca: ";
cin.get();
cin.getline(zamestnanec[i].meno,50);
cout << "Zadajte vek zamestnanca: \n";
cin >> zamestnanec[i].vek;
cout << "Zadajte popis prace zamestnanca: ";
cin.get();
cin.getline(zamestnanec[i].praca,50);
}
else {
i=x+1;
x=i-1;
};
};
int t;
cout << "Tabulka zamestnancov firmy " << f <<"\n";
for(t=1; t<x+1; t++)
{cout << "\n___________________________" <<"\n";
cout << t << ".zamestnanec\n";
cout << "Meno:"<<zamestnanec[t].meno;
cout << "\nVek:"<<zamestnanec[t].vek;
cout << "\nPopis prace:"<<zamestnanec[t].praca;
};
cin.get();
cin.get();
return 0;
}
20. 5. 2010
/* Zoznam zamestnancov */
#include <iostream.h>
#include <string.h>
struct firma
{
char meno[25];
int vek;
char druh_prace[50];
};
int main()
{
int X=20;
int i,j;
int podmienka;
firma zamestnanec[20];
for (i=0; i<=X-1; i++)
{
if (i==0)
{
cout<<"Zadaj nazov firmy: ";
cin.get(zamestnanec[i].meno,25);
}
else
{
cin.get();
cout<<"Zadaj meno zamestnanca: ";
cin.getline(zamestnanec[i].meno,25);
cout<<"Zadaj vek zamestnanca: ";
cin>>zamestnanec[i].vek;
cin.get();
cout<<"Zadaj pocis prace zamestnanca: ";
cin.getline(zamestnanec[i].druh_prace,50);
cout<<"Chces pridat dalsieho zamestnanca? Ak ano napsi 1, ak nie tak 0\n";
cin>>podmienka;
}
if (podmienka==0)
{
for (j=0; j<=i; j++)
{
if (j==0)
{
cout<<"Nazov firmy\n";
cout<<zamestnanec[j].meno<<"\n";
cout<<"ID\tMeno\t\tVek\tpopis prace\n";
}
else
{
cout<<j<<"\t"<<zamestnanec[j].meno<<"\t"<<zamestnanec[j].vek<<"\t"<<zamestnanec[j].druh_prace<<"\n";
}
}
}
}
system ("pause");
return 0;
}
Tohle jsem vytvořil zdá se, že to funguje, jenomže když zadám u druhýho zaměstnance druh práce, tak to spadne s hláškou, že to přestalo pracovat.
#include <iostream>
using namespace std;
struct firma
{
char jmeno [20];
int vek;
char prace [20];
};
int main()
{
cout << "naHe Corporation";
int maxpocet;
int anone;
char yy = 236;
char ii = 161;
char cc = 159;
char eee = 216;
char uuu = 222;
char rr = 253;
char ee = 130;
char aa = 160;
cout << "\n Dobr" << yy << " den. Zadejte pros" << ii << "m po" << cc << "et zam" << eee << "stnanc" << uuu << ": ";
cin >> maxpocet;
firma osoba [maxpocet];
int pocet = 0;
for (int j=0;j<maxpocet;j++)
{
cout << "Chcete p" << rr << "idat nov" << ee << "ho zam" << eee << "stnance ? (1- ano, 0 - ne) ";
cin >> anone;
if (anone==1)
{
cin.get();
pocet++;
cout << "Zadejte jm" << ee << "no nov" << ee << "ho zam" << eee << "stnance: ";
cin.getline(osoba[j].jmeno, 20);
cout << "Nyn" << ii << " zadejte v" << eee << "k: ";
cin >> osoba[j].vek;
cout << "A nakonec druh pr" << aa << "ce: ";
cin.get();
cin.getline(osoba[j].prace, 20);
}
if (j==maxpocet)
{
cout << "Dos" << aa << "hl jsi maxim" << aa << "ln" << ii << "ho po" << cc << "tu zam" << eee << "stnanc" << uuu;
cout << "\nZde je jejich v" << yy << "pis: \n";
cout << "Jm" << ee << "no\tV" << eee << "k\tPr" << aa << "ce\n";
int i;
for (i=0; i<j; i++)
{
cout << osoba[i].jmeno << "\t" << osoba[i].vek << "\t" << osoba[i].prace;
}
}
if (anone==0)
{
cout << "Zam" << eee << "stnanci firmy naHe corporation: \n";
cout << "Jm" << ee << "no\tV" << eee << "k\tPr" << aa << "ce\n";
int i;
for (i=0; i<j; i++)
{
cout << osoba[i].jmeno << "\t" << osoba[i].vek << "\t" << osoba[i].prace;
}
cin.get();
cin.get();
return 0;
}
}
cin.get();
cin.get();
return 0;
}
14. 6. 2010
podle mě je chyba v tom zamestnanci clovek[i] a pak zamestnanci clovek[j], ty totiž pokude se nepletu chceš říct, že uděláš řetězec například: zamestnanci clovek[200] a pak budeš jednotlivě dělat indexy kažýho toho pole, čili pak si chceš postupně díky cyklu dávat zamestnanci clovek[1] = ... zamestnanci clovek[2]=... atd., nejdřív ale musíš defiovat to pole, a čili podle mě má být nejdříve int clovek[i], a pak teprve získavat index proměnou j, čili pak už se nebude dosazovat ale jakoby j chápat jako číslo jednotlivého políčka celýho řetězce, jestli to tak je ale na 100% tak to nevim...
25. 2. 2011
kdyz pouzijes for na zacatku nemas potom problem to ukoncit predtim nez zadas vsechny zamestnance
kdyz na zacatek das ze jich bude 200 a potom co chces po 10 ukoncit tak musis dat reba 190*0?
5. 3. 2011
sory uz to vidim ale stejne newim proc ale prekladac mi neakceptuje
zamestnanci lide[pocet];
error C2133: 'lide' : unknown size
Neviem ci si toto niekto precitate, hlavne ti co to pisu, teda skor pisali...viem ze to uz urcite menit nic nebudete ale ja som uplny zaciatocnik a v tych tutorialoch sa neviem 100% vyznat, neviem celkom pre koho boli tie tutorialy urcene ale ak pre zaciatocnikov tak to podla mna maju dost tazke, ti co vedia ine jazyky si neco aj domyslia ale ja asi tazko...ked uz aj teoria je taka ze fajn nepochopim, pochopim na prikladoch ale ani tie niesu bohvieake, neviem ci som tu jediny co ma taky problem ale mne to tak proste pripada, snazim sa ale stale mi to nejako nevychadza, vsetko musim robit zlozitejsie ako je potrebne lebo tomu neviem zaraz pochopit, jednotlivo fajn pochopim ale ked mam spajat viacere prvky tak su tam stale chyby, napriklad vobec neviem spravit podmienku, kde niesu cislice, hesla a podobne sa lahko robia to mi vzdy ide ale ked chcem nejaku inu podmienku kde su zaradene pismena, teda cez typ char spravit tak mi tam vkuse vyhadzuje ze neco neni v poriadku a aj ked to nejako opravim tak podmienka nefunguje ako ma,...nejako sa hadam cez to preluskam ale mohli ste to viac amatersky vysvetlovat...teraz uz je pozde ale taky typ do buducna...
Reagoval na komentář od uživatele naheCZ :
neviem to isto ale problem moze byt aj v tom ze si pouzil najprv cin >> xxx a potom zatym cin.getline(xxx)....ten admin co pise tie tutorialy nam ukazoval a bolo to aj za ulohu zistit preco to robi...takze tebe ten druhy cin.getline vynecha jeden riadok pretoze je (prazdny), podla mna si mal pouzit rovnake typy, aj ja to tak robim...radsej...ale inak nvm
22. 7. 2011
caute
mohli by ste mi prosim poradit,preco mi vo vypise nikdy nevypise prve pismenko mena zamestnanca?neviem na to nejak prist,neviem kde je chyba,dakujem
#include<iostream>
#include<cstring>
using namespace std;
using std::cout;
struct firma
{
char meno[30];
int vek;
char job[30];
};
int main()
{
char nazov[20];
firma employe[20];
int i=0;
int j;
int x; //pomocna do cyklu pre pocet zamestnancov
int ans;
cout<<"\t Vitajte v aplikacii pre spravu zamestnancov\t\n";
cout<<"\t--------------------------------------------------\t\n";
cout<<"Zadajte nazov firmy : ";
cin.getline(nazov,20);
do
{
cout<<"Zadajte meno zamestnanca : ";
cin.get();
cin.getline(employe[i].meno,30);
cout<<"Zadajte vek zamestnanca : ";
cin>>employe[i].vek;
cout<<"Zadajte pracovnu poziciu zamestnanca : ";
cin.get();
cin.getline(employe[i].job,30);
i=i+1;
cout<<"Prajete si pridat dalsieho zamestnanca,alebo vytlacit zoznam?\n";
cout<<"Stlacte 1 pre pokracovanie,0 pre vytlacenie zoznamu.\n ";
cin>>ans;
x=i;
}
while(ans != 0);
cout<<"\t Meno zamestnanca\t Vek\t Pracovna pozicia"<<endl;
for(j=0;j<x;j++)
{
//cout<<"Meno zamestnanca : "<<employe[j].meno<<endl;
//cout<<"Vek zamestnanca : "<<employe[j].vek<<endl;
//cout<<"Pracovna pozicia : "<<employe[j].job<<endl;
cout<<"\n";
cout<<"******************************************************************\n";
cout<<"\t "<<employe[j].meno<<"\t\t "<<employe[j].vek<<"\t "<<employe[j].job<<endl;
cout<<"---------------------------------------------------------------\n";
}
system("pause");
}
31. 7. 2011
Tady je funkční zdrojový kód k lekci 5.
#include <iostream>
using namespace std;
struct zamestnanec
{
char jmeno[30];
int vek;
char prace[30];
}osoba[32000];
int main()
{
cout << "\t\t\t\tTechland\n";
cout << "================================================================================\n";
cout << "\t\t\tSeznam zamestnancu firmy\n";
cout << "================================================================================\n";
string answer;
int i,z,pocet;
cout << "\t\t\tZvol si pocet zamestnancu. ";
cin >> i;
pocet=i;
i=1;
z = 0;
for(i=0;i<pocet;i++)
{
z++;
cout << "\n\n\t\t\tZadej jmeno " << z << ". zamestnance. ";
cin >> osoba[i].jmeno;
cout << "\n\t\t\tZadej jeho(jeji) vek ";
cin >> osoba[i].vek;
cout << "\n\t\t\tZadej jeho(jeji) praci ";
cin >> osoba[i].prace;
cout << "\n\t\t\tChces zadat dalsiho zamnestnance? (ano|ne) ";
cin >> answer;
if(answer == "ne" || answer == "Ne")
i = pocet;
};
cout << "\n\t\t\tZde je seznam pracujicich\n";
for(i=0;i<pocet;i++)
{
cout << "\n\t\t\t";
cout << osoba[i].jmeno;
cout << "\n\t\t\t";
cout << osoba[i].vek;
cout << "\n\t\t\t";
cout << osoba[i].prace;
cout << "\n\n\t\t\t";
};
cin.get();
cin.get();
return 0;
}
Snad vám to hodně pomůže. Už se o to tady snaží 6 let, tak můžete konečně opravovat =D
31. 10. 2011
Ahoj, zde dávám své řešení. Mám ošetřené vstupy pro zadání špatné hodnoty počtu zaměstnanců, vstup pro 1 zaměsnance.
struct podnik
{
string jmeno;
int vek;
string prace;
};
int _tmain(int argc, _TCHAR* argv[])
{
//struktury
int pocet_lidi;
char otazka;
string nazev_firmy = "A je to";
int limit;
podnik zamestnanec [3200];
int counter=0;
cout << "zadej pocet zamestnancu:" << endl;
cin >> pocet_lidi;
if (pocet_lidi <= 0)
{
cout << "nesmyslny pocet zamestnancu" << endl;
}
for (int i=0; i<pocet_lidi;i++)
{
if(i==0)
{
cout << "zadej jmeno zamestnance: ";
cin >> zamestnanec[i].jmeno;
cout << "zadej vek zamestnance: ";
cin >> zamestnanec[i].vek;
cout << "zadej pracovni pozici: ";
cin >> zamestnanec[i].prace;
++counter;
}
if(i>0)
{
cout << "chcete pokracovat? A/N" << endl;
cin >> otazka;
}
if(otazka == 'a' || otazka == 'A')
{
++counter;
cout << "zadej jmeno zamestnance: ";
cin >> zamestnanec[i].jmeno;
cout << "zadej vek zamestnance: ";
cin >> zamestnanec[i].vek;
cout << "zadej pracovni pozici: ";
cin >> zamestnanec[i].prace;
}
if(otazka == 'n' || otazka == 'N')
{
cout << nazev_firmy << endl;
for (int i=0; i<counter;i++)
{
cout << zamestnanec[i].jmeno << "\t" << zamestnanec[i].vek << "\t" << zamestnanec [i].prace << endl;
cout << "----------------------------------" << endl;
continue;
}
break;
}
}
return 0;
}
Ahoj. Mam takový dotaz, na struktury jsem v knižce, ze které se také pokouším něco naučit, nenarazila. Takhle na první pohled to vypadá i celkem srozumitelně. Ale říkám si, jaký je rozdíl mezi tímhle a třídou? Má struktura nějaké výhody a nevýhody oproti třídě? (class)? Kdy se co používá?
4. 3. 2012
#include <iostream>
using namespace std;
struct pracovnici
{
char meno[40];
int vek;
char praca[40];
}pracovnik[40];
int main()
{
char a_n;
int dalsie;
cout<<"Zadajte prosim pocet zamestnancov firmi Ludia:(max. 30)";
cin>>dalsie;
pracovnici pracovnik[dalsie];
for (int i=0;i<dalsie;i++)
{
cout<<"Chcete vytvorit dalsieho zamestnanca firmi Ludia?(A\N):";
cin >> a_n;
cin.get();
if(a_n == 'A'){
cout << "Zadajte prosim meno zamestnanca:";
cin.getline(pracovnik[i].meno,40);
cout<<"Zadajte prosim vek zamestnanca:";
cin>>pracovnik[i].vek;
cin.get();
cout<<"Zadajte prosim pracu zamestnanca:";
cin.getline(pracovnik[i].praca,40);}
else dalsie=i;
}
for (int i=0;i<dalsie;i++)
{
cout<<"_______________________________________________________\n"<<pracovnik[i].meno<<"("<<pracovnik[i].vek<<") "<<pracovnik[i].praca<<"\n_______________________________________________________";
}
cin.get();
cin.get();
return 0;
}
///*********************************************************///
/// ///
/// Autor: Haring Jan ///
/// Datum: 1.kveten.2012 ///
/// Program/Verze: CodeBlocks/8.02 ///
/// Popis: Pouziti struktury, cyklus for, pole ///
/// ///
///*********************************************************///
#include <iostream>
using namespace std;
const int SIZE = 28;
int a,pocet;
char an;
struct firma
{
char jmeno[SIZE];
char druh[SIZE];
int vek;
};
int main()
{
cout << "\t\t ----------------------------------------";
cout << "\n\t\t |\t\t\t\t\t |";
cout << "\n\t\t |";
cout << "\t\tVytvoril: Jan Haring\t |\n\t\t |\t\tpro programujte.com\t |";
cout << "\n\t\t |\t\t\t\t\t |\n";
cout << "\t\t ----------------------------------------\n\n";
cout << "\t\t ----------------------------------------";
cout << "\n\t\t |\t\t\t\t\t |";
cout << "\n\t\t |";
cout << "\t\t FIRMA JH\t\t |";
cout << "\n\t\t |\t\t\t\t\t |\n";
cout << "\t\t ----------------------------------------\n\n\n\n";
cout << "Pro pridani zamestnancu urcete pocet: ";
cin >> pocet;
firma prace[pocet];
for (a=0;a<pocet;a++)
{
cout << "Chcete pridat noveho zamestnance do firmy JH?\n\n\tA/N: ";
(cin>>an).get();
if(an == 'A'|an == 'a')
{
cout << "\nJmeno a prijmeni zamestnance: ";
cin.get(prace[a].jmeno,SIZE).get();
cout << "Vek zamestnance: ";
(cin>>prace[a].vek).get();
cout << "Druh prace zamestnance: ";
cin.get(prace[a].druh,SIZE).get();
}
else
{
pocet = a;
}
}
cout <<"-------------------------------------------------------";
cout << "\nPocet zamestnancu firmy JH: " << pocet << endl;
cout <<"-------------------------------------------------------";
for(a=0;a<pocet;a++)
{
cout <<"\n-------------------------------------------------------\n";
cout <<"Jmeno zamestnance: "<<prace[a].jmeno << endl;
cout <<"Vek: "<< prace[a].vek << endl;
cout <<"Druh prace: "<<prace[a].druh;
cout <<"\n-------------------------------------------------------";
}
return 0;
}
Můj výtvor :D
#include <iostream>
using namespace std;
struct zam //zaměstnanci
{
char jmeno[10];
char prijmeni[15];
int vek;
char prace[15];
}z[32000];
int main()
{
int pz, i=1;
bool odpoved, zk=false;
char odp;
cout << "Dobry den, vitejte v programu Databaze Zamestnancu!\nZadejte pocet zamestnancu:";
cin >> pz;
cin.get();
do
{cin.get();
cout << "zadejte " << i << ". zamestnance !\nZadejte prijmeni:";
cin.getline(z[i].prijmeni, 15);
cout << "\nZadejte jmeno:";
cin.getline(z[i].jmeno, 10);
cout << "\nZadejte vek:";
cin >> z[i].vek;
cin.get();
cout << "\nZadejte praci:";
cin.getline(z[i].prace, 15);
cout << "\n----Zamestnanec dokoncen !----";
cin.get();
cout << "\nChcete pokracovat v pridavani zamestnancu ? (A/N)";
cin >> odp;
do{
if (odp == 65)
{odpoved = true; zk = true;}
else if (odp == 66)
{odpoved = false; zk = true;}}
while (zk != true);
i++;
}while (odpoved == true && i <= pz);
cout << "---------------------!!Zobrazeni zamestnancu!!---------------------";
i=1;
for (int e=0; e< pz; e++)
{cout << "\n\nCislo: " << i << "\nJmeno: " << z[i].jmeno << "\tPrijmeni: " << z[i].prijmeni << "\nVek: " << z[i].vek << "\t\tPrace: "
<< z[i].prace <<endl; i++;};
cin.get();
cin.get();
return 0;
}
#67 Jeysym
Ahoj "Jesym", zkoušel jsem tvůj zdrojový kód, a po zadání příjmení, jména, věku a druhu práce mě to nepustí dál. Tak to zkus ještě vylepšit :), inspirovat se můžeš mým zdrojovým kódem nad tvým komentářem. Hodně štěstí.
#68 pulsik
Nevím, zkošel jsem to a jde mi to. Ale možná to bude tím že při zadávání ano/ne tam musí být velké A, nebo velké N. Mohl bych to vyřešit pomocí || v podmínce. Ale možná na to je nějaká funkce jako v pascalu.
#69 Jeysym
Ano, malé písmena nefungují + ani velké N mi nejde? Jen když zadám velké A tak mi program běží dál.
#70 pulsik
Aha vůbec nevím proč jsem do programu dal podmínku na A/B místo A/N. Přidávám upravený zdroj s podporou také malých písmen, ale možná že to časem ještě celé upravím.
#include <iostream>
using namespace std;
struct zam //zaměstnanci
{
char jmeno[10];
char prijmeni[15];
int vek;
char prace[15];
}z[32000];
int main()
{
int pz, i=1;
bool odpoved, zk=false;
char odp;
cout << "Dobry den, vitejte v programu Databaze Zamestnancu!\nZadejte pocet zamestnancu:";
cin >> pz;
cin.get();
do
{cin.get();
cout << "zadejte " << i << ". zamestnance !\nZadejte prijmeni:";
cin.getline(z[i].prijmeni, 15);
cout << "\nZadejte jmeno:";
cin.getline(z[i].jmeno, 10);
cout << "\nZadejte vek:";
cin >> z[i].vek;
cin.get();
cout << "\nZadejte praci:";
cin.getline(z[i].prace, 15);
cout << "\n----Zamestnanec dokoncen !----";
cin.get();
cout << "\nChcete pokracovat v pridavani zamestnancu ? (A/N)";
cin >> odp;
do{
if (odp == 65 || odp == 97)
{odpoved = true; zk = true;}
else if (odp == 78 || odp == 110)
{odpoved = false; zk = true;}}
while (zk != true);
i++;
}while (odpoved == true && i <= pz);
cout << "---------------------!!Zobrazeni zamestnancu!!---------------------";
i=1;
for (int e=0; e< pz; e++)
{cout << "\n\nCislo: " << i << "\nJmeno: " << z[i].jmeno << "\tPrijmeni: " << z[i].prijmeni << "\nVek: " << z[i].vek << "\t\tPrace: "
<< z[i].prace <<endl; i++;};
cin.get();
cin.get();
return 0;
}
Robim menší program na premenu cisel z dvojkovej sustavy na desiatkovu a neviem aby aj fungoval prosim o radu:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char ch=159;
char i=161;
char l=163;
Zac:cout<<"Zadajte "<< ch<<i<<"slo v dvojkovej s"<<l<<"stave:\n";
char dvojkovecislo[100];
cin>>dvojkovecislo;
int mocniny[]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304};
int m=strlen(dvojkovecislo);
int z=strlen(dvojkovecislo);
int vysledky[100];
int x;
int y=0;
for(x=0;x<z;x++);
if(dvojkovecislo[x]==1)
mocniny[m]==vysledky[y];
else if(dvojkovecislo[x]==0)
vysledky[y]==0;
++y;
--m;
cout<<vysledky[0];
cin.get();
cin.get();
return 0;
}
Takhle jsem ten úkol vyřešil já :)
#include <iostream>
using namespace std;
int main()
{
// DEKLARACE PROMENNYCH VYUZITYCH V PROGRAMU
int x;
int y=0;
int z=2;
int a;
const unsigned long j=3200;
// STRUKTURA
struct struktura
{
char jmeno[40];
int vek;
char prace[40];
};
cout << "Jaky pocet zamestnancu chcete zadat?\n";
// INICIALIZACE Y POMOCÍ CIN
cin >> x;
// POLE STRUKTUR - ZAMESTRANEC
struktura zamestnanec[j];
// CYKLUS
for(y; y<=x; y++)
{
if(y==0)
{
cout <<"Jmeno: "; cin >> zamestnanec[y].jmeno; cout << endl;
cout <<"Vek: "; cin >> zamestnanec[y].vek; cout << endl;
cout <<"Prace: "; cin >> zamestnanec[y].prace; cout << endl;
}
else
{
if(y<=x)
{
cout << endl << "Prejete si zadat udaje o dalsim zamestnanci?(NE - 0, ANO - 1)\n";
cin >> z;
}
if(y==x && z>0)
{
cout << "Jiz jste zadal maximalni pocet zamestnancu!\n";
z=0;
}
}
if(z == 1 && y<x)
{
cout <<"Jmeno: "; cin >> zamestnanec[y].jmeno; cout << endl;
cout <<"Vek: "; cin >> zamestnanec[y].vek; cout << endl;
cout <<"Prace: "; cin >> zamestnanec[y].prace; cout << endl;
}
if(z == 0)
{
a = y;
y = x+1;
}
if (y>x)
{ y=0;
for(y; y < a; y++)
{
if(y==0)
{ cout << "Celkovy pocet zamestnancu: " << a << endl; }
cout << zamestnanec[y].jmeno <<" |"<< "\t" << zamestnanec[y].vek <<" |"<< "\t" << zamestnanec[y].prace << "\n---------------------------------------------- \n";
}
}
}
system("PAUSE");
return 0;
}
Upravena verze:
#include <iostream>
using namespace std;
int main()
{
// DEKLARACE PROMENNYCH VYUZITYCH V PROGRAMU
int x;
int y=0;
int z=2;
int a;
const unsigned long j=3200;
// STRUKTURA
struct struktura
{
char jmeno[40];
int vek;
char prace[40];
};
cout << "Jaky pocet zamestnancu chcete zadat?\n";
// INICIALIZACE Y POMOCÍ CIN
cin >> x;
cin.get();
// POLE STRUKTUR - ZAMESTRANEC
struktura zamestnanec[j];
// CYKLUS
for(y; y<=x; y++)
{
if(y==0)
{
cout <<"Jmeno: \n"; cin.getline(zamestnanec[y].jmeno, 20); cout << endl;
cout <<"Vek: \n"; cin >> zamestnanec[y].vek; cin.get(); cout << endl;
cout <<"Prace: \n"; cin.getline(zamestnanec[y].prace, 20); cout << endl;
}
else
{
if(y<=x)
{
cout << endl << "Prejete si zadat udaje o dalsim zamestnanci?(NE - 0, ANO - 1)\n";
cin >> z;
cin.get();
}
if(y==x && z>0)
{
cout << "Jiz jste zadal maximalni pocet zamestnancu!\n";
z=0;
}
}
if(z == 1 && y<x)
{
cout <<"Jmeno: \n"; cin.getline(zamestnanec[y].jmeno, 20); cout << endl;
cout <<"Vek: \n"; cin >> zamestnanec[y].vek; cin.get(); cout << endl;
cout <<"Prace: \n"; cin.getline(zamestnanec[y].prace, 20); cout << endl;
}
if(z == 0)
{
a = y;
y = x+1;
}
if (y>x)
{ y=0;
for(y; y < a; y++)
{
if(y==0)
{ cout << "Celkovy pocet zamestnancu: " << a << endl; }
cout << zamestnanec[y].jmeno <<"\t|\t" << zamestnanec[y].vek <<"\t|\t"<< zamestnanec[y].prace << "\n-------------------------------------------------------------------------------- \n";
}
}
}
system("PAUSE");
return 0;
}
16. 12. 2016
#6 liskohlav
Ahoj, zalezi ako sa ti poblazni na meno (alebo akekolvek veco co ma dve slova) je lepsie pouzit string. String je vlastne pole charov ale nemas tam problem s medzerami a idealne je to nacitavat s getline()
UKAZEM:
strnig meno;
cout << "Zadajte meno osoby: " << endl; // pouzivatel zada napriklad Jozko Mrkvicka
getline(cin, meno);
Good Luck ..;)
Môžem sa spýtať, čo je v tomto programe zle?
#include <iostream>
using namespace std;
struct zamestnanci
{
char meno[20];
int vek;
char povolanie[20];
};
int main()
{
int pocet;
cout<<"Zadajte pocet zamestnancov: ";
cin >> pocet;
zamestnanci celkovo[pocet];
cout <<"Meno \tVek \tpovolanie \n";
cout<<"\n____________________________________________________________________________\n";
for(int a=0;a<pocet;a++){
celkovo[a].meno;
cout <<"\t";
celkovo[a].vek;
cout << "\t";
celkovo[a].povolanie;
}
cin.get();
cin.get();
cin.get();
cin.get();
cin.get();
return 0;
}
Lebo ako ho spustím, spýta sa ma že koľko chcem zamestnancov ale hneď potom žo stlačím enter, cyklus prebehne a nič sa netane, to je koniec programu. Neviem si s tým pomôcť :(, Za každý návrh budem vďačný.
5. 1. 2018
#76 Majko
Tenhle program by ani neměl jít přeložit. Možná spouštíš nějakou starou verzi tohoto programu.
Problém je tohle:
zamestnanci celkovo[pocet];
pocet neni konstanta, která by byla známa za překladu. A v C++ se pole musí vždy deklarovat s nějakou konstantní velikostí. Buď můžes udělat nějak velké pole, a doufat, že to bude stačit (zamestntanci celkovo[100]), a nebo můžeš použít nějakou strukturu, co se dokáže zvětšit (std::vektor atd.; což už je ale složitější...).
Taky tohle moc nedává smysl:
celkovo[a].meno;
To samo o sobě nic nedělá. Nechtěl jsi tam mít spíše načítání ze vstupu? (cin >> celkovo[a].meno)
#77 Jeysym
no nejak tak som to chcel pomocou vstupu, určite vyskúšam a ďakujem
23. 4. 2018
Moje verze :)
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
#define in cin
#define out cout
struct lide
{
char jmeno[20];
int vek;
char prace[30];
} zamest[32000];
int main()
{
int a, c, d;
char ano_ne;
out << "Vitejte v databazi zamestnancu. Zadejte pocet zamestnancu ve firme" << endl;
cin >> d;
for (a = 1; a <= d; a++)
{
out << "Zadejte jmeno " << a << ". zamestnance" << endl;
in.get();
in.getline(zamest[a].jmeno, 20);
out << "Zadejte vek " << a << ". zamestnance" << endl;
in >> zamest[a].vek;
out << "Zadejte zamestnani " << a << ". zamestnance" << endl;
in.get();
in.getline(zamest[a].prace, 30);
if (a != d)
{
out << "Chcete zadat dalsiho zamestnance?" << endl;
out << "ANO - a / NE - n" << endl;
in >> ano_ne;//in >> b;
if (ano_ne== 'a')
{ }
}
if ((ano_ne=='n')||(d==a)) //((b == 0)||(d == a))
{
out << "Ve spolecnosti Glanzstoff pracuji tyto zamestnanci: \n";
for (c = 1; c <= a; c++)
{
out << "\t" << zamest[c].jmeno<< endl;
out << "\t" << zamest[c].vek << endl;
out << "\t" << zamest[c].prace << endl;
out << endl;
}
goto konec;
}
}
konec:
in.get(); in.get();
}
14. 6. 2018
Ahoj :)
může mi prosím někdo poradit,kde je chyba? Jakmile zadám odpověď "ano", nebo jakoukoli delší, než jedno písmeno, skočí mi to rovnou na věk (asi se do jména přiřadí zbylá písmena "no") a ani string mi nepomohl (změna "char jmeno" na "string jmeno").
#include<iostream>
#include<cstring>
using namespace std;
struct podnik
{
char jmeno[50];
int vek;
char pozice[50];
};
int main()
{
int maximum;
char ano_ne;
cout<<"Dobry den, vitejte v programu C++\n\nZadejte prosim pocet zamestnancu: ";
cin>>maximum;
podnik zamestnanec[maximum];
for (int c=0; c<maximum;c++)
{
cout<< "\nPrejete si zadat noveho zamestnance (A/N)? \n";
cin>>ano_ne;
if (ano_ne=='A' || ano_ne=='a'||ano_ne=='Ano'||ano_ne=='ANO'||ano_ne=='ano')
{
cout << "\nZadejte jmeno, vek a druh prace " << c+1 << ". zamestnance:\n";
cout<< "1. Jmeno: ";
cin.get();
cin.getline(zamestnanec[c].jmeno,50);
cout<< "2. Vek: ";
cin>>zamestnanec[c].vek;
cout<< "3. Druh prace: ";
cin.get();
cin.getline(zamestnanec[c].pozice,50);
}
else if (maximum==c)
cout<<"Zadal jste uvedeny pocet uzivatelu, ktere jste definoval na zacatku.";
else if (ano_ne=='n' || ano_ne=='N'|| ano_ne=='Ne'|| ano_ne=='NE')
cout<< "Jiz nechcete zadat dalsiho uzivatele. Vyckejte, nez se nacte tabulka s vypsanymi udaji o zamestnancich";
maximum=c+1;
}
for (int e=0; e<maximum; e++)
{
cout<< "\n_______________________________________________________________________\n";
cout<<zamestnanec[e].jmeno<<"\n"<<zamestnanec[e].vek<<"\n"<<zamestnanec[e].pozice<<"\n";
}
cin.get();
cin.get();
return 0;
}
Původně jsem chtěla ten program vytvořit tak, aby se po zadání prvního uživatele zeptal, zda chci zadat dalšího a pokračoval tak dál, ale obě varianty mi končí na druhém uživateli a na dalšího se nedostanu.
Díky :)
14. 6. 2018
#80 Nela
Ahoj, projel jsem ti kod, a pridal jsem nejake komentare. Tak snad by ti to mohlo pomoci ;).
#include <iostream>
//#include <cstring>
#include <string>
using std::string;
using namespace std;
struct podnik // nazev moc nedava smysl, tahle struktura nepopisuje cely
// podnik, ale jen jednoho zamestnance, lespi nazev by byl "zamestnanec"
{
char jmeno[50];
int vek;
char pozice[50];
};
int main()
{
int maximum;
//char ano_ne; // "char" je pouze jeden znak, cely retezec se do nej nevejde
string ano_ne; // tohle uz je retezec
//char ano_ne[50]; // nebo by to slo i takhle, tenhle typ se ale spatne porovnava na rovnost
// misto (ano_ne == "Ano") by se muselo pouzit (strcmp(ano_ne, "Ano"))
cout<<"Dobry den, vitejte v programu C++\n\nZadejte prosim pocet zamestnancu: ";
cin>>maximum;
//podnik zamestnanec[maximum]; <-- tohle nejde, maximum neni konstanta
podnik * zamestnanec = new podnik[maximum]; // pole se musi vytvorit na "halde"
int skutecny_pocet_zamestnancu = 0;
for (int c=0; c<maximum;c++)
{
cout<< "\nPrejete si zadat noveho zamestnance (A/N)? \n";
cin>>ano_ne;
if (ano_ne=="A" || ano_ne=="a"||ano_ne=="Ano"||ano_ne=="ANO"||ano_ne=="ano")
{
skutecny_pocet_zamestnancu = skutecny_pocet_zamestnancu + 1;
cout << "\nZadejte jmeno, vek a druh prace " << c+1 << ". zamestnance:\n";
cout<< "1. Jmeno: ";
cin.get();
cin.getline(zamestnanec[c].jmeno,50);
cout<< "2. Vek: ";
cin>>zamestnanec[c].vek;
cout<< "3. Druh prace: ";
cin.get();
cin.getline(zamestnanec[c].pozice,50);
}
else if (maximum==c)
// Tohle se nikdy neprovede
cout<<"Zadal jste uvedeny pocet uzivatelu, ktere jste definoval na zacatku.";
else if (ano_ne=="n" || ano_ne=="N"|| ano_ne=="Ne"|| ano_ne=="NE") {
cout<< "Jiz nechcete zadat dalsiho uzivatele. Vyckejte, nez se nacte tabulka s vypsanymi udaji o zamestnancich";
break; // unkonci for cyklus
}
//maximum=c+1; <-- tohle nedava moc smysl, proc by se mel menit pocet zamestnancu?!
}
for (int e=0; e < skutecny_pocet_zamestnancu; e++)
{
cout<< "\n_______________________________________________________________________\n";
cout<<zamestnanec[e].jmeno<<"\n"<<zamestnanec[e].vek<<"\n"<<zamestnanec[e].pozice<<"\n";
}
cin.get();
cin.get();
return 0;
}
15. 6. 2018
#81 Jeysym
Už jsem na to včera přišla :) ale moc děkuji za pomoc a poznámky. Rozhodně si to pročtu!
#include <iostream>
#include <cstring>
using namespace std;
struct podnik {
char jmeno[50];
int vek;
char pozice[50];
};
int main() {
int maximum;
string ano_ne = "ano";
cout << "Dobry den, vitejte v programu C++\n\nZadejte prosim pocet zamestnancu: ";
cin >> maximum;
podnik zamestnanec[maximum];
for (int c = 0; c < maximum; c++) {
if (ano_ne == "A" || ano_ne == "a" || ano_ne == "Ano" || ano_ne == "ANO" || ano_ne == "ano") {
cout << "\nZadejte jmeno, vek a druh prace " << c + 1 << ". zamestnance:\n";
cout << "1. Jmeno: ";
cin.get();
cin.getline(zamestnanec[c].jmeno, 50);
cout << "2. Vek: ";
cin >> zamestnanec[c].vek;
cout << "3. Druh prace: ";
cin.get();
cin.getline(zamestnanec[c].pozice, 50);
cout << "\nPrejete si zadat dalsiho zamestnance (A/N)? \n";
cin >> ano_ne;
} else if (maximum == c)
cout << "Zadal jste uvedeny pocet uzivatelu, ktere jste definoval na zacatku.";
else if (ano_ne == "n" || ano_ne == "N" || ano_ne == "Ne" || ano_ne == "NE" || ano_ne == "ne")
{
cout << "Jiz nechcete zadat dalsiho uzivatele. Vyckejte, nez se nacte tabulka s vypsanymi udaji o zamestnancich";
maximum = c;
}
}
cout << maximum << endl;
for (int e = 0; e < maximum; e++) {
cout << "\n_______________________________________________________________________\n";
cout << zamestnanec[e].jmeno << "\n" << zamestnanec[e].vek << "\n" << zamestnanec[e].pozice << "\n";
}
cin.get();
cin.get();
return 0;
}
16. 11. 2020
Přidávám svou verzi :-)
#include <iostream>
#include <array> //size()
#include <string>
using namespace std;
//funkce zpracuje zadaný text a vráti text s dosazenými CZ znaky
string CZtext(string str)
{
for (int i = 0; i < str.length(); i++)
{
switch (str[i])
{
case 'á':
str[i] = char(160); break;
case 'Á':
str[i] = char(181); break;
case 'é':
str[i] = char(130); break;
case 'É':
str[i] = char(144); break;
case 'í':
str[i] = char(161); break;
case 'Í':
str[i] = char(161); break;
case 'ý':
str[i] = char(236); break;
case 'Ý':
str[i] = char(237); break;
case 'ó':
str[i] = char(162); break;
case 'Ó':
str[i] = char(224); break;
case 'ú':
str[i] = char(163); break;
case 'Ú':
str[i] = char(233); break;
case 'ů':
str[i] = char(133); break;
case 'ď':
str[i] = char(212); break;
case 'Ď':
str[i] = char(210); break;
case 'ť':
str[i] = char(156); break;
case 'Ť':
str[i] = char(155); break;
case 'ň':
str[i] = char(229); break;
case 'Ň':
str[i] = char(213); break;
case 'ž':
str[i] = char(167); break;
case 'Ž':
str[i] = char(166); break;
case 'č':
str[i] = char(159); break;
case 'Č':
str[i] = char(172); break;
case 'š':
str[i] = char(231); break;
case 'Š':
str[i] = char(230); break;
case 'ř':
str[i] = char(253); break;
case 'Ř':
str[i] = char(252); break;
case 'ě':
str[i] = char(216); break;
}
}
return str;
}
struct Zamestnanci
{
string jmeno;
string vek; //pokud proměnná věk slouží jen pro informativní charakter (pro použití ve výpočtech by byl lepší int)
string druhPrace;
};
int main()
{
const int SIZE = 10000;
array<Zamestnanci, SIZE> osoby;
//zadáváni zaměstnanců postupně - po každém zadáni bude dotaz zda se bude pokračovat
int x = 1;
char znak;
int zam = 0;
for (int i = 0; i < x; i++)
{
cout << "\n" << CZtext("Zadejte zaměstnance č. ") << i+1 << ": \n";
cout << CZtext("Jméno :");
getline(cin, osoby[i].jmeno);
cout << CZtext("Věk :");
cin >> osoby[i].vek;
cout << CZtext("Druh práce :");
cin.get();
getline(cin, osoby[i].druhPrace);
bool cyklus = true;
do
{
cout << "\n\n" << CZtext("Přejete si přidat dalšího zaměstnance Y/N :");
cin >> znak;
switch (znak)
{
case 'y':
if (i+1 < osoby.size())
x++;
else
{
cout << "\n" << CZtext("ERROR - nedostatečná kapacita - nelze vložit dalšího zaměstnance!!!") << "\n\n";
zam = x;
}
cyklus = false;
cin.get();
break;
case 'n':
zam = x;
x = 0;
cyklus = false;
break;
default:
cout << "\n" << CZtext("ERROR - (klavesa 'y' pro pokračovat a klavesa 'n' pro konec) - nic jiného") << "\n\n";
}
} while (cyklus);
}
//program vypíše všechny údaje o všech zaměstnancích v TABULCE
cout << "\n\t" << CZtext("Jmeno") << "\t\t\t" << CZtext("Věk") << "\t" << CZtext("Druh práce") << "\n";
for (int i = 0; i < zam; i++)
{
cout << i+1 << "\t" << osoby[i].jmeno << "\t\t\t" << osoby[i].vek << "\t" << osoby[i].druhPrace << "\n";
}
return 0;
}