Problém s úkolem C++

Michal2000

Problém s úkolem C++
« kdy: 24. 01. 2018, 22:16:18 »
Zdravím,

Ve škole jsme dostali úkol.

1. Vytvořte složený datový typ s názvem klient, který bude obsahovat: číslo ID, řetězec s názvem jméno, řetezec s názvem požadavek a přepínač TRUE/FALSE s názvem vyřízeno. 
2. Vytvořte DT pole klientů s názvem čekárna (velikost 10), vytvořte proměnnou tohoto DT  s názvem hala.                                                   
3. Vytvořte funkci init, která bude mít vstupní parametr pole klientů, tento parametr bude zapisovatelný. Funkce naplní všechny položky v poli výchozími hodnotami (id bude druhá mocnina indexu pole), jméno bude: Franta, požadavek bude NIC, přepínač bude na false.
4. Vytvořte funkci vypiš pole, která bude mít vstupní parametr pole klientů a vypíše celé pole.                                                                                                                      5. na 5 pozici v čekárně zapište: Aneta, kafe a true.                                                                                             Zavolejte v main: funkci init, zápis Anety a vypište pomocí funkce celé pole.

Jen podotýkám, že jsme se ještě vůbec neučili pointery ani reference. Bylo nám pouze řečeno, že pokud chceme zapisovat ve funkci musíme použít &. Mohl by mi to někdo lépe objasnit ? Jaká část programování se tímto zabývá ? Dále přikládám svůj kod. Mělo by to být dobře. Kromě bodů 4 a 5 s těmi si nevím rady. První způsob zápisu kodu funguje. Místo volání všech položek ve funkci vypisPole se dají vypsat ve funkci init. Jenže já je potřebuju vypsat právě ve funkci vypisPole a já nevím jak.

NEFUNGUJE

Kód: [Vybrat]

#include <iostream>
using namespace std;

struct klient{
int ID;
string jmeno;
string pozadavek;
bool vyrizeno;

};
const int VEL=10;
typedef klient cekarna[VEL];
cekarna hala;

void init(cekarna&vstup){
for(int x=0;x<=VEL;x++){
    vstup[x].ID=x*x;
    vstup[x].jmeno="Franta";
    vstup[x].pozadavek="nic";
    vstup[x].vyrizeno=false;
}

}

void vypisPole(cekarna &vstup) {
for(int x = 0; x < VEL; x++) {
cout
<< "id: " << vstup[x].ID
<< ", jmeno: " << vstup[x].jmeno
<< ", pozadavek: " << vstup[x].pozadavek
<< ", vyrizeno: " << vstup[x].vyrizeno
<< endl;
}

}


int main()
{

hala[4].jmeno = "Aneta";
hala[4].pozadavek="kafe";
hala[4].vyrizeno=true;


init(hala);
vypisPole(hala);

}



FUNGUJE

Kód: [Vybrat]

#include <iostream>

using namespace std;

struct klient{
int ID;
string jmeno;
string pozadavek;
bool vyrizeno;

};
const int VEL=10;
typedef klient cekarna[VEL];
cekarna hala;

void init(cekarna&vstup){
for(int x=0;x<=VEL;x++){
    vstup[x].ID=x*x;
    vstup[x].jmeno="Franta";
    vstup[x].pozadavek="nic";
    vstup[x].vyrizeno=false;
    cout<<vstup[x].ID<<endl;
    cout<<vstup[x].jmeno<<endl;
    cout<<vstup[x].pozadavek<<endl;
    cout<<vstup[x].vyrizeno<<endl;
    cout<<endl;
}

}

int main()
{

hala[4].jmeno = "Aneta";
hala[4].pozadavek="kafe";
hala[4].vyrizeno=true;


init(hala);
vypisPole(hala);

}






SutDent

Re:Problém s úkolem C++
« Odpověď #1 kdy: 24. 01. 2018, 22:33:55 »
Ahoj mas tam o = navic

void init(cekarna&vstup){
for(int x=0;x<VEL;x++){
    vstup
  • .ID=x*x;

    vstup
  • .jmeno="Franta";

    vstup
  • .pozadavek="nic";

    vstup
  • .vyrizeno=false;

}

snad takhle ...

Pakosko

Re:Problém s úkolem C++
« Odpověď #2 kdy: 24. 01. 2018, 22:35:04 »
A v čom máš konkrétne problém ?
tvoj "NEFUNGUJE" kod sa mi bezproblemov zkompiloval a spustil, len si initom prepisujes Anetu....

Michal2000

Re:Problém s úkolem C++
« Odpověď #3 kdy: 24. 01. 2018, 22:48:39 »
Problém je v tom, že když to zkompiluju, tak to nic nevypíše na obrazovku.

Michal2000

Re:Problém s úkolem C++
« Odpověď #4 kdy: 24. 01. 2018, 22:50:46 »
Už funguje díky.


Pakosko

Re:Problém s úkolem C++
« Odpověď #5 kdy: 24. 01. 2018, 22:52:51 »
Zabudol si to kompilácii spustiť ?  ;)
to občas aj mne stáva a polhodinu hľadám, kde je chyba  :D

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Problém s úkolem C++
« Odpověď #6 kdy: 25. 01. 2018, 12:03:38 »
Jen podotýkám, že jsme se ještě vůbec neučili pointery ani reference. Bylo nám pouze řečeno, že pokud chceme zapisovat ve funkci musíme použít &. Mohl by mi to někdo lépe objasnit ? Jaká část programování se tímto zabývá ?
Pokud nepoužiješ pointer nebo referenci, tak ve funkci při jejím zavolání vzniká nová proměnná a do ní se hodnota (případně objekt) kopíruje. Použití ukazatele (nebo reference) na tu původní hodnotu umožňuje nevytvářet kopii (to může někdy významně ušetřit čas) a měnit tu původní hodnotu (tak se dá ven vrátit výsledek).

Jano

Re:Problém s úkolem C++
« Odpověď #7 kdy: 25. 01. 2018, 14:15:00 »
Tipnem si: Problem bol tu:

for(int x=0;x <= VEL;x++){

Ondra.....

Re:Problém s úkolem C++
« Odpověď #8 kdy: 25. 01. 2018, 14:39:41 »
Jen par poznamek ke kodu:

1. typy velkym pismenem struct Klient
2. promenna cyklu vzdy i , zvysuje to citelnost, nemusis nic vymejslet, kdyz to veme nekdo jiny, bude tam min chyb

MarSik

Re:Problém s úkolem C++
« Odpověď #9 kdy: 25. 01. 2018, 16:07:33 »
1. typy velkym pismenem struct Klient

Taky to mám radši, ale je potřeba dodržovat jmenné konvence projektu. Pokud mají nařízeno pojmenovat strukturu klient, tak bych se toho držel. Jinak to nějaký automat může vyhodnotit jako chybu.

Honza

Re:Problém s úkolem C++
« Odpověď #10 kdy: 25. 01. 2018, 16:23:10 »
Obvykle se nejprve volá init(), který všude nastaví implicitní hodnoty, a teprve poté se provádějí explicitní nastavení. Takže si přehoď Anetu až za volání init() a ve funkci nech "<=". Protože až zjistíš, že tam tu Anetu nechceš a vymažeš ji, budeš mít poslední prvek pole neinicializovaný...

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Problém s úkolem C++
« Odpověď #11 kdy: 25. 01. 2018, 19:33:11 »
Mala poznamka :
Konstantu pro definovani rozmeru pole, bych osobne vynechal, vzhledem k tomu ze jeji jediny ucel je urcit rozmer pole je myslim zbytecne pouzit promennou a volil bych spis toto reseni:

Kód: [Vybrat]
#define VEL 10
...
typedef klient cekarna[ VEL ];
...

Re:Problém s úkolem C++
« Odpověď #12 kdy: 25. 01. 2018, 20:29:32 »
Mala poznamka :
Konstantu pro definovani rozmeru pole, bych osobne vynechal, vzhledem k tomu ze jeji jediny ucel je urcit rozmer pole je myslim zbytecne pouzit promennou a volil bych spis toto reseni:

Kód: [Vybrat]
#define VEL 10
...
typedef klient cekarna[ VEL ];
...
... což je c++ prasárna.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Problém s úkolem C++
« Odpověď #13 kdy: 25. 01. 2018, 20:53:44 »
Mala poznamka :
Konstantu pro definovani rozmeru pole, bych osobne vynechal, vzhledem k tomu ze jeji jediny ucel je urcit rozmer pole je myslim zbytecne pouzit promennou a volil bych spis toto reseni:

Kód: [Vybrat]
#define VEL 10
...
typedef klient cekarna[ VEL ];
...
... což je c++ prasárna.

Proc?

Re:Problém s úkolem C++
« Odpověď #14 kdy: 25. 01. 2018, 21:28:27 »
Mala poznamka :
Konstantu pro definovani rozmeru pole, bych osobne vynechal, vzhledem k tomu ze jeji jediny ucel je urcit rozmer pole je myslim zbytecne pouzit promennou a volil bych spis toto reseni:

Kód: [Vybrat]
#define VEL 10
...
typedef klient cekarna[ VEL ];
...
... což je c++ prasárna.

Proc?
c++ má specifikátor const.
#define pro konstanty v c++ je anachronismus(?)
achranofobie?
V každém případě konstanty s const jsou šéfované překladačem, #define je záležitost preprocesoru...