Ako na strukturu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ako na strukturu – C / C++ – Fórum – Programujte.comAko na strukturu – C / C++ – Fórum – Programujte.com

 

Vestax0
Newbie
29. 4. 2006   #1
-
0
-

Zdravim

Mam strukturu v ktorej sa nachadza 10 krstnych mien. A ja chcem nahodne vybrat a vypisat jedno z nich, len neviem ako na to. :ehm:

Nahlásit jako SPAM
IP: ...–
Někomu to dáno je, někomu to prostě dáno není.
Duch
29. 4. 2006   #2
-
0
-

Nejsp?? m?te probl?m generovat n?hodn? ??slo. Sice neum?m generovat pseudon?hodn?, ale zn?m takov? jednodu??? ?e?en?:



#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int cislo;
cout << "napiste cislo od 0 do 65 000n";
cin >> cislo;
srand(cislo);
cout << "Vase nahodne cislo z deseti je: " << (rand() % 10)+1 << endl;
system("PAUSE");
}
?

Nahlásit jako SPAM
IP: ...–
Vestax0
Newbie
29. 4. 2006   #3
-
0
-

No neviem co to je pseudonahode (kto vie nech sa prihlasi budem rad) ja nahodne cislo do desat generujem tak:

 

#include <conio.h>
#include <iostream>
#include <ctime>
using namespace std;

int main()
{
srand((unsigned)time(NULL));
int i=rand()%10;
cout<<i;
getch();
return 0;
}

Len neviem ako podla nahodneho cislo nahodne vybrat clena sturktury. :((
ale dakujem za snahu

Nahlásit jako SPAM
IP: ...–
Někomu to dáno je, někomu to prostě dáno není.
Jura_0
Stálý člen
29. 4. 2006   #4
-
0
-

No, tak to, co pisete vy, je losovani pseudonahodneho cisla(protoze ty cisla jsou jenom 32bit, coz neni zrovna moc kombinaci), kdybyste chtel opravdu nahodne cislo tak na to musite pouzit nejakou knihovnu, nebo pod Windows treba CryptGenRandom. Jinak random()%10, losuje v intervalu <0, 9>, takze desitka se nevylosuje nikdy. Ale ted k vasemu problemu - to myslim ani vyresit nepujde(mozna by to slo nejak prasacky-pres aritmetiku ukazatelu),a le to vzm silne nedoporucuji.
Jedine, i kdyz nehezke, reseni by mozna bylo:



char* Generuj(struktura * p)
{
srand(time(NULL));
int num = rand()%10;
switch (num){
case 0:
return p->jmeno1;
case 1:
return p->jmeno2;
//...
}
}

Nahlásit jako SPAM
IP: ...–
Vestax0
Newbie
29. 4. 2006   #5
-
0
-

Ok, dakujem Vam. :D

Nahlásit jako SPAM
IP: ...–
Někomu to dáno je, někomu to prostě dáno není.
Tomáš Bos0
Stálý člen
29. 4. 2006   #6
-
0
-

Vyskusaj toto. Pole staci uz len vlozit do struktury.



#include <iostream>
using namespace std;
int main()
{
char * krstneMena[] = {"Jozo",
"Fero",
"Marek",
"Peto",
"Tomas",
"Samo",
"Tibor",
"Juraj",
"Stefan",
"Ronald"};

int cislo;

for(int j = 0; j < 10; j++)
{
cislo = rand()%10;
cout << krstneMena[cislo] << endl;
}


system("pause");
return 0;
}

Nahlásit jako SPAM
IP: ...–
- Tuk tuk tuk!
Kto tam?
- Rekurzia.
Ktoze???
- Tuk tuk tuk!
Vestax0
Newbie
29. 4. 2006   #7
-
0
-

Nerozumiem ako vlozit pole do stuktury skuste to napisat aj s tou strukturov.:P

Nahlásit jako SPAM
IP: ...–
Někomu to dáno je, někomu to prostě dáno není.
Tom?? Bos0
Stálý člen
30. 4. 2006   #8
-
0
-

Napr. takto:



#include <iostream>
using namespace std;

struct Programatori
{
char meno[20];
};

int main()
{
int cislo;
char * krstneMena[] = {"Jozo",
"Fero",
"Marek",
"Peto",
"Tomas",
"Samo",
"Tibor",
"Juraj",
"Stefan",
"Ronald"};

Programatori programatori[10];

cout << "Zaklad:\n\n";

for(int j = 0; j < 10; j++)
{
strcpy(programatori[j].meno, krstneMena[j]);
}

for(int j = 0; j < 10; j++)
{
cout << programatori[j].meno << endl;
}

cout << endl << "Nahodne:\n\n";

for(int j = 0; j < 10; j++)
{
cislo = rand()%10;
cout << programatori[cislo].meno << endl;
}

system("pause");
return 0;
}

Nahlásit jako SPAM
IP: ...–
- Tuk tuk tuk!
Kto tam?
- Rekurzia.
Ktoze???
- Tuk tuk tuk!
Duch
30. 4. 2006   #9
-
0
-

N?kolik p??klad?:



#include <ctime>
#include <cstdlib>
#include <iostream>

void load_string(char * var, char * str) { //Neznam jinou funkci
int j;
for(j = 0; str[j] != 0; j++) {
var[j] = str[j];
}
var[j] = '';
};

//#define ONE 1 //Classic style
//#define TWO 1 //Co takhle dat si vlozenou strukturu?
//#define THREE 1 // Co takhle dynamicky alokovat?
// Posledni, dle me nejelegantnejsi reseni(Vsechny defy zakom. == posl. reseni)

#ifdef ONE //Classic style

struct meno {
char jmeno[20];
};

using namespace std;

int main()

{
meno zoznam[10];

load_string(zoznam[0].jmeno, "Franta");
load_string(zoznam[1].jmeno, "Jozo");
load_string(zoznam[2].jmeno, "Fero");
load_string(zoznam[3].jmeno, "Marek");
load_string(zoznam[4].jmeno, "Tomas");
load_string(zoznam[5].jmeno, "Samo");
load_string(zoznam[6].jmeno, "Tibor");
load_string(zoznam[7].jmeno, "Juraj");
load_string(zoznam[8].jmeno, "Stefan");
load_string(zoznam[9].jmeno, "Ronald");*/

srand((unsigned)time(NULL));
int cislo;
for(int j = 0; j < 10; j++)
{
cislo = rand()%10;
cout << zoznam[cislo].jmeno << endl;
}
system("pause");
return 0;

}

#elif TWO //Co takhle dat si vlozenou strukturu?

struct zoznam {
typedef struct meno {
char men[20];
} meno;

meno mena[10];
char * id(int j);
};

char * zoznam::id(int j) {
return (mena[j].men);
};

using namespace std;

int main()

{
zoznam zamestnamci;

load_string(zamestnamci.id(0), "Franta");
load_string(zamestnamci.id(1), "Jozo");
load_string(zamestnamci.id(2), "Fero");
load_string(zamestnamci.id(3), "Marek");
load_string(zamestnamci.id(4), "Tomas");
load_string(zamestnamci.id(5), "Samo");
load_string(zamestnamci.id(6), "Tibor");
load_string(zamestnamci.id(7), "Juraj");
load_string(zamestnamci.id(8), "Stefan");
load_string(zamestnamci.id(9), "Ronald");

srand((unsigned)time(NULL));
int cislo;
for(int j = 0; j < 10; j++)
{
cislo = rand()%10;
cout << zamestnamci.id(cislo) << endl;
}
system("pause");
return 0;

}

#elif THREE // Co takhle dynamicky alokovat?

/*
Toto reseni je sice podivne, pac toho jeste moc
neumim, ale zda se byt funkcni
*/

//meno je pracovni typ pro 'zoznam'
struct meno { //Sem ukladam jednotlivy retezce
int size; //Velikost retezce
char * men; //Pole znaku (retezec)
void init(); //Nastaveni hodnoty size na 0;
void load(char * str); //pridani noveho retezce
void unset(); //Smaznuti dynamycky alokovaneho retezce
};

void meno::init() {
size = 0;
}

void meno::load(char * str) {
int j;
if(size != 0) delete []men; //Aby mi neunikala pamet
for(j = 0; str[j] != 0; j++); //Neumim jinak zjistit velikost
men = new char[j];
size = j;
for(j = 0; j != size; j++) {
men[j] = str[j];
}
men[j] = '';
}

void meno::unset() {
delete []men;
}

//Typ zoznam jen ma fce jen pro pridani/navraceni retezce
struct zoznam { //Pole retezcu
int size; //Velikost pole
meno * mena; //Odkaz na zacatek pole
void init(); //Pocatecni nastaveni promennych
void add(char * str); //Pridani retezce do pole
char * get(int id); //Navraceni uciteho retezce pod jeho indexem
void unset(); //smazani vsech dynamycky alokovanych promennych
};

void zoznam::init() {
size = 0;
mena = new meno[1]; //Inicializace promenne
}

void zoznam::add(char * str) {
size++;
meno * m = new meno[size];
for(int j = 0; j != size; j++) {
m[j] = mena[j];
}
delete []mena;
mena = m;
mena[size-1].init();
mena[size-1].load(str);
}

char * zoznam::get(int id) {
return mena[id].men;
}

void zoznam::unset() {
for (int j = 0; j != size; j++) {
mena[j].unset();
}
delete []mena;
}

using namespace std;

int main()

{
zoznam z;
z.init();
z.add("Franta");
z.add("Jozo");
z.add("Fero");
z.add("Marek");
z.add("Tomas");
z.add("Samo");
z.add("Tibor");
z.add("Juraj");
z.add("Stefan");
z.add("Ronald");

srand((unsigned)time(NULL));
int cislo;
for(int j = 0; j < 10; j++)
{
cislo = rand()%10;
cout << z.get(cislo) << endl;
}

z.unset();

system("pause");
return 0;

}


#else // Nejelegantnejsi reseni

#include <string>
#include <vector>

using namespace std;

int main()

{
vector<string> zamestnamci;

zamestnamci.push_back("Franta");
zamestnamci.push_back("Jozo");
zamestnamci.push_back("Fero");
zamestnamci.push_back("Marek");
zamestnamci.push_back("Tomas");
zamestnamci.push_back("Samo");
zamestnamci.push_back("Tibor");
zamestnamci.push_back("Juraj");
zamestnamci.push_back("Stefan");
zamestnamci.push_back("Ronald");

srand((unsigned)time(NULL));
int cislo;
for(int j = 0; j < 10; j++)
{
cislo = rand()%10;
cout << zamestnamci[cislo] << endl;
}
system("pause");
return 0;

}

#endif

Tak tady vid?te p?r n?pad? z m? amatersk? snahy.?:D?
Edit: zapomn?l jsem na form?tovani i-?ek

Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
30. 4. 2006   #10
-
0
-

d1ce: Ted vam asi pokazim naladu, ale mam jednu vycitku. Vsiml jsem si, ze sice teprve pisete, ze se ucite(to mam na mysli u toho dyn. prikladu), ale rad bych vas upozornil na jeden dulezity fakt. Pokud pouzivate nekde ve strukture(tride) ukazatele, tak byste mel pretizit operator prirazeni a definovat si vlastni kopirovaci konstruktor. A to proto, ze kopy kostruktor a aoperator prirazeni, ktery vygeneruje kompilator, vytvori pouze tzv. melke kopie.

Nahlásit jako SPAM
IP: ...–
Duch
30. 4. 2006   #11
-
0
-

A? zvl?dnu to co mi vyt?k?te, tak to jist? vyu?iji, ale zat?m po??d z?pas?m se spr?vnou spr?vou pam?ti, a proto jsem se pokusil o dynamick? pole retezc?. Nicm?n? d?ky za kritiku, alespo? m?m v?c chuti se zase n?co nov?ho nau?it. ?:pc:?

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

Podobná vlákna

Strukturu new — založil pep

Pointer na strukturu — založil Fugii

Pointer na strukturu — založil Pavelv

Pointer na strukturu — založil Romča

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ý