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

Dvojrozmerne pole/ matica – C / C++ – Fórum – Programujte.comDvojrozmerne pole/ matica – C / C++ – Fórum – Programujte.com

 

flack
~ Anonymní uživatel
2 příspěvky
19. 1. 2014   #1
-
0
-

Zdravim potreboval by som poradit. Samemu mi to dnes uz do hlavy vobec nejde.

Potrebujem funkciu ktora vygeneruje cisla pre maticu 9x4 v urcitom rozsahu. Co si myslim ze som uz aj spravil.

Dalej potrebujem funkciu ktora takuto naplnenu maticu vypise.  Funkcia na vygenerovanie obsahu matice musi mat hlavicku void generujMaticuNahodne(int matica[9][4]) a fukncia ktora vypise jej obsah musi mat hlavicku void vypisMaticu(int matica[9][4]).

Ja som vyprodukoval nieco taketo

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

using namespace std;

void generujMaticuNahodne(int matica[9][4])
{
int r, s,t[9][4];

srand(time(0));
  for (r=0; r<9; r++)
    {
        for (s=0; s<4; s++)
            {
                t[r][s]=rand()%(-18)- 45;
                cout << setw(10) << t[r][s];
            }
        cout << endl;
    }
}


void vypisMaticu(int matica[9][4])
{
    int r, s,t[9][4];

srand(time(0));
  for (r=0; r<9; r++)
    {
        for (s=0; s<4; s++)
            {
                cout << setw(10) << t[r][s];
            }
        cout << endl;
    }
}



int main()
{

int intMatica1[9][4];

cout <<Vygeneruje a vypise" << endl;
generujMaticuNahodne(intMatica1);

cout <<" Iba Vypise obsah" << endl;
vypisMaticu(intMatica1);


    return 0;
}


Je mi jasne ze funkcia void nevracia ziadnu hodnotu no ja musim pouzit void a tieto dve hlavicky. Zial mi moje mozgove obratky nejak prestali fungovat a netusim ako dostat tie hodnoty matice spat do mainu aby som snimi mohol dalej pracovat v programe.   V programovani som zaciatocnik. Tak ma snad niekto nakopne.

Nahlásit jako SPAM
IP: 62.197.207.–
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #2
-
0
-

Nerozumiem moc c++, ale v c by to mohlo vyzerat nejak takto:

void generujMaticu(int[][] matica) {
	int m = sizeof(matica)/sizeof(matica[0]);
	int n = sizeof(matica[0])/sizeof(matica[0][0]);
	int r,s;
	for (r=0; r<m; r++){
		for(s=0; s<n; s++){
			matica[r][s] = // nejakym sposobom vygenerujes cislo napr. rand()*A + B
		}
	}
}

void vypisMaticu(int[][] matica){
	// zda sa mi ze v c je funkcia length(), ale niesom si isty
	// podla stack overflow by toto malo dat velkost pola
	int m = sizeof(matica)/sizeof(matica[0]);
	int n = sizeof(matica[0])/sizeof(matica[0][0]);
	int r, s;
	for (r = 0; r < m; r++) {
		for (s=0; s<n; s++) {
			if (s) {
				print("%d", matica[r][s]);
			} else {
				printf("\t%d", matica[r][s]);
			}
		}
		printf("\n");
	}
}
Nahlásit jako SPAM
IP: 147.175.177.–
vitamin+8
Grafoman
19. 1. 2014   #3
-
+1
-
Zajímavé

#2 sleepy
Bohuzial nie, kompilator by to ani neprelozil. Urcite by to ani nefungovalo tak ako si myslis.

#1 flack
Skus nieco taketo:

void generujMaticuNahodne(int (&matica)[9][4]);	//referencia na pole

//alebo trochu vseobecnejsie:
template <size_t N, size_t M>
void generujMaticuNahodne(int (&matica)[N][M]);
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #4
-
0
-

#3 vitamin
Jak, ze nie v c by to malo fungovat a preto som myslel ze c++ by s tym nemal mat problem. Sak predas pointer na 2 rozmerne pole do metody a tam ho naplnis. A dalsou to zobrazis? Ci? Vobec sa nevyznam v rozdieloch, medzi c a c++ (okrem toho ze c++ je objektovo orientovany). Som predpokladal, ze taketo veci zostali v c++.

Nahlásit jako SPAM
IP: 147.175.177.–
flack
~ Anonymní uživatel
2 příspěvky
19. 1. 2014   #5
-
0
-

Tak ja som stym trocha pohol, neviem ci je to programatorsky spravne, ale zda sa ze mi to robi zatial co potrebujem.

v podstate som odtial vyhodil v int t[9][4] a v kode procedury som t[9][4] nahradil matica[9][4] vysledok je tu.

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

using namespace std;

void generujMaticuNahodne(int matica[9][4])
{
int r, s;//t[9][4];

srand(time(0));
  for (r=0; r<9; r++)
    {
        for (s=0; s<4; s++)
            {
                matica[r][s]=rand()%(-18)- 45;
                cout << setw(10) << matica[r][s];
            }
        cout << endl;
    }
}


void vypisMaticu(int matica[9][4])
{
    int r, s;//t[9][4];

srand(time(0));
  for (r=0; r<9; r++)
    {
        for (s=0; s<4; s++)
            {
                cout << setw(10) << matica[r][s];
            }
        cout << endl;
    }
}


int main()
{

int intMatica1[9][4];

cout <<Vygeneruje a vypise" << endl;
generujMaticuNahodne(intMatica1);

cout <<" Iba Vypise obsah" << endl;
vypisMaticu(intMatica1);


    return 0;
}

Neskor sa pozriem a pokusim porozumiet aj tomu co ste tu napisali vy. Este dorabam ine casti zadania.

Nahlásit jako SPAM
IP: 62.197.207.–
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #6
-
0
-

Na moj kod sa moc nesustreduj, zrejme nieje dobre napisany. Ale islo mi prave o to aby si naplnil to pole matica. Malo to byt, len zovseobecnenie pre lubovolnu maticu nie len 9x4.

Nahlásit jako SPAM
IP: 147.175.177.–
Doomista+1
Stálý člen
20. 1. 2014   #7
-
0
-

#5 flack
trochu offtopic, ale ze zkušenosti ti poradím, abys srand(time(0)); deklaroval na začátku mainu a nikde jinde, jinak ta náhodnost může začít strašně blbnout.

Nahlásit jako SPAM
IP: 90.176.176.–
Na vše stačí iostream...
Doomista+1
Stálý člen
20. 1. 2014   #8
-
0
-

#6 sleepy
Aby jsi mohl funkci předat pole libovolné velikosti musí mít funkce jako parametr kupříkladu int **arr a musíš tomu předat dynamicky alokované pole:
 

int **arr=new int*[VYSKA];
	for(int a=0; a<VYSKA; a++){
	arr[a]=new int[SIRKA];
	}
Nahlásit jako SPAM
IP: 90.176.176.–
Na vše stačí iostream...
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, 63 hostů

Podobná vlákna

Dvojrozmerné pole — založil nord

Pole dvojrozmerne — založil CSTA

Dvojrozmerné pole — založil matcho13579

Dvojrozmerne pole — založil programator453

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ý