| | |
| Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
Autor | Správa |
---|
|
Zdravím, mám maticu matica[R,S] (dvojrozmerné pole), ktorej veľkosť by som chcel zadať z klávesnice. Keďže veľkosti musia byť konštanty, tak som skúsil: int A, B; cin >> A, B; const int R = A, S = B; Ale tadiaľ cesta nevedie. A ešte by ma zaujímalo, prečo musia byť veľkosti R a S deklarované na samom začiatku kódu mimo akejkoľvek funkcie vrátane main(), aby sa dala matica poslať do parametrov funkcií. Vopred ďakujem za pomoc.
|
|
Registrovaný: 15.06.14 Prihlásený: 26.03.24 Príspevky: 17930 Témy: 142 Bydlisko: Bratislava |
_________________ ITX >>> ATX |
|
| Napísal autor témy Styracoz: 31.03.2017 16:40 | |
|
Bez dynamického alokovania to nepôjde?
|
|
Registrovaný: 15.06.14 Prihlásený: 26.03.24 Príspevky: 17930 Témy: 142 Bydlisko: Bratislava |
nie
_________________ ITX >>> ATX |
|
| Napísal autor témy Styracoz: 31.03.2017 18:48 | |
|
Prečo?
|
|
Registrovaný: 11.01.09 Prihlásený: 28.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 31.03.2017 20:46 | |
|
Lebo konstanta je nieco, co mas dane uz v dobe kompilacie programu a ako sam pises: Citácia: ktorej veľkosť by som chcel zadať z klávesnice Dynamicke polia su presne na tento ucel, ked v dobe navrhu programu nevies, kolko miesta v pamati potrebujes pre nejaku premennu.
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 28.04.11 Prihlásený: 28.03.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 31.03.2017 21:20 | |
|
Styracoz píše: A ešte by ma zaujímalo, prečo musia byť veľkosti R a S deklarované na samom začiatku kódu mimo akejkoľvek funkcie vrátane main(), aby sa dala matica poslať do parametrov funkcií. Vopred ďakujem za pomoc. Suvisi to s tym, ze ked deklarujes premennu v nejakej funkcii napr main, vytvori sa len na zasobniku tej funkcie, to znamena, ze je viditelna len v ramci tej funkcie. Ak vytvoris premennu mimo funkcie vytvoris tzv. globalnu premennu, vtedy na nu vidia vsetky funkcie. Ak pouzijes dynamicke alokovanie, vtedy sa pamat alokuje na halde do ktorej maju pristup vsetky funkcie (akurat musia mat na tu premennu pointer). // Spojený príspevok Pia 31.03.17 21:26:01Myslim ze nemate pravdu, ze to bez dynamicke alokacie nejde. Ak si spravne spominam od standardu c99 je mozne vytvorit nieco taketo: https://en.wikipedia.org/wiki/Variable-length_array ale niesom si tym isty, neskusal som to, dufam ze netrepem blbosti.
|
|
| Napísal autor témy Styracoz: 01.04.2017 11:46 | |
|
mitko píše: Suvisi to s tym, ze ked deklarujes premennu v nejakej funkcii napr main, vytvori sa len na zasobniku tej funkcie, to znamena, ze je viditelna len v ramci tej funkcie. Ak vytvoris premennu mimo funkcie vytvoris tzv. globalnu premennu, vtedy na nu vidia vsetky funkcie. Myslel som si to, ale zaujímavé, že pri jednorozmernom poli to nevyžaduje const a je viditeľné pre všetky funkcie aj keď jeho dĺžka je deklarovaná v main(). V čom je tam rozdiel oproti dvojrozmernému polu?
|
|
Registrovaný: 28.04.11 Prihlásený: 28.03.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 01.04.2017 21:00 | |
|
Asi nerozumiem úplne čo myslíš. Ak máš niečo deklarované v main nemôžeš to použiť v iných funkciách a const s tým nič nezmení. Môžeš dať nejaký priklad?
|
|
| Napísal autor témy Styracoz: 02.04.2017 18:28 | |
|
void nacitaj(int pole[], int dlzka) { for (int i = 0; i < dlzka; i++) cin >> pole[i]; }
int main() { const int dl = 5; int pole[dl];
nacitaj(pole, dl);
system("pause"); return 0; } S tými konštantami som sa pomýlil, musia byť všade. Ale tento kód vyššie sa dá skompilovať aj keď je dĺžka pola deklarovaná v main(). void generujMaticu(int matica[][], int m, int n) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) matica[i][j] = rand(); }
int main() { const int M = 8, N = 5; int matica[M][N]; generujMaticu(matica, M, N); return 0; } Toto sa neskompiluje. Ani keď dám do parametrov procedúry matica[M][N]. A ja neviem, v čom je rozdiel, že jedno sa dá skompilovať a druhé nie.
|
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 02.04.2017 18:31 | |
|
prvy rozmer pri viacrozmernom poli mozes vynechat, viac nie, na toto je vhodne pouzit template Kód: template <size_t M, size_t N> void generujMaticu(int matica[M][N], int m, int n) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) matica[i][j] = rand(); } toto je tiez spravne: Kód: template <size_t N> void generujMaticu(int matica[][N], int m, int n) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) matica[i][j] = rand(); }
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
| Napísal autor témy Styracoz: 02.04.2017 18:38 | |
|
Ďakujem, len si musím osviežiť ako fungujú šablóny.
|
|
Registrovaný: 28.04.11 Prihlásený: 28.03.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 02.04.2017 18:56 | |
|
Fuha riesit to templatami je dost overkill. Nefunguje nieco ako: Kód: void generujMaticu(int** matica, int m, int n) . .
|
|
Registrovaný: 15.06.14 Prihlásený: 26.03.24 Príspevky: 17930 Témy: 142 Bydlisko: Bratislava |
ano funguje to aj takym stylom
_________________ ITX >>> ATX |
|
Registrovaný: 27.06.09 Prihlásený: 04.03.23 Príspevky: 332 Témy: 3 Bydlisko: Košice - ok... | Napísal focko: 02.04.2017 19:02 | |
|
Prave som to chcel napisat, cez ten pointer DD
_________________ GitHub: mfocko | mfocko.xyz OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed) Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission] |
|
| Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Nacitanie z klavesnice v C-cku v Assembler, C, C++, Pascal, Java | 4 | 1320 | 06.11.2006 15:47 junior848 | | nacitanie matice a nasledny vypis v Assembler, C, C++, Pascal, Java | 3 | 635 | 04.01.2015 23:48 nBXXL | | Porovnanie stlpcov matice v C++ v Assembler, C, C++, Pascal, Java | 3 | 414 | 21.03.2015 12:18 focko | | [C++] Párne čísla v stĺpci matice v Assembler, C, C++, Pascal, Java | 2 | 1110 | 24.03.2015 18:07 sanji | | Suma členov matice pomocou smerníkov ( v C-ečku ) v Assembler, C, C++, Pascal, Java | 1 | 1143 | 28.03.2009 10:05 neutronmind | | C++ nacitanie v Assembler, C, C++, Pascal, Java | 6 | 912 | 10.01.2010 10:24 ado21 | | C - načítanie stringu v Assembler, C, C++, Pascal, Java | 14 | 1889 | 17.10.2010 21:33 remus | | Zmena velkosti C na viste v Pevné disky a radiče | 10 | 592 | 25.08.2008 19:13 al Mualim | | Acronis Disc Director 10 - Zmena velkosti C-cka v Ostatné programy | 9 | 1091 | 05.12.2009 16:31 girus | | [C]funkcie, nacitanie a porovnanie zo suboru v Assembler, C, C++, Pascal, Java | 6 | 1235 | 31.03.2015 17:47 dany2281995 | | nacitanie obsahu suboru do pola v C v Assembler, C, C++, Pascal, Java | 5 | 2076 | 28.04.2011 10:39 Fico | | efektivne nacitanie suboru do pamati v c v Assembler, C, C++, Pascal, Java | 4 | 2281 | 05.07.2011 14:53 v.tkac | | C, problem s osetrenim vstupu z klavesnice - char v Assembler, C, C++, Pascal, Java | 5 | 520 | 05.12.2011 14:07 t-pack25 | | [C# - Help] Načítanie + vypísanie so súboru text do textbox v Assembler, C, C++, Pascal, Java | 8 | 797 | 14.11.2013 15:57 erik518 | | pascal matice v Assembler, C, C++, Pascal, Java | 2 | 561 | 02.04.2012 21:25 F3RY | | Matice v Jave v Assembler, C, C++, Pascal, Java | 1 | 477 | 27.11.2013 8:19 BX |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|