Jednoduchy C programik:)

Programovacie jazyky, rady, poradňa...
marcus-16
Star
Star
Používateľov profilový obrázok
Príspevky: 688
Registrovaný: 30 mar 2006, 19:33

Jednoduchy C programik:)

Príspevok od používateľa marcus-16 »

malo by to byt jednoduche, ale ja sa nejak neviem z tych smernikov vysomarit :lol:
definujte dynamicke dvojrozmerne pole ( pole, ktore sa bude spracovavat pomocou dvoch indexov)
typu short int rozmerov 10x100 tak, aby boli prvky ulozene za sebou t.j. vyhradeny suvisly blok pamate.
vygenerujte do takto definovanej matice cisla z intervalo 0 az 5
vyzera to jednoducho, ale ma sa to robit cez jednorozmerne pole nejak takto..

Kód: Vybrať všetko

#define v 10
#define s 100

void main(){

int i,pom;	
int *pole1;
int *pole2;//???


pole1=(int*)malloc((v*s)*sizeof(int));
pole2=(int*)malloc((v)*sizeof(int));//???

  

 for(i=0;i<v;i++){

    //tu musim asi polu2[0] priradit adresu pole1+0, polu2[1] adresu pole1+100..ak chapete..akokeby sme si tojednorozmerne pole1 rozkuskovali na V jednorozmernych a kazde priradime polu[0] az polu[v-1]

  }


  for(i=0;i<(v*s);i++)
	pole1[i]=rand()%6;

//v tomto okamihu by som mal byt schopny sa cez pole2 vypisat tie prvy

system("pause");
}
..snad sa najde nikto kto ma pochopil a pochopil aj o co ide..dopredu dakujem za pomoc :)
picuge
Expert
Expert
Príspevky: 167
Registrovaný: 17 dec 2005, 20:38
Bydlisko: Bratislava/Martin

Príspevok od používateľa picuge »

no tak ak som spravne pochopil tak by to malo vyzerat nejako takto:

Kód: Vybrať všetko

#define v 10
#define s 100
#include <stdio.h>
#include <stdlib.h>

void main()
{
	int i,pom;
	int *p,**p2;

	p = (int *) malloc((v*s)*sizeof(int));
	p2 = (int **) malloc(v*sizeof(int *));

	for (i=0;i<v;i++) 
		p2[i]=&p[i*100];

	for (i=0;i<(v*s);i++)
		p[i]=rand()%5+1;

	for (i=0;i<v;i++){
		for (pom=0;pom<s;pom++)
			printf("%d ",*(p2[i]+pom));

			printf("\n");
	}

}
aj ked je to robene v c++, takze si to budes musiet mierne prerobit(male detialy, ako vypis, kniznice...)

a myslim ,ze by sa to dalo spravit aj este o nieco jednoduchsim sposobom, kde by si pouzil iba jedno pole...

Kód: Vybrať všetko

#define v 10
#define s 100
#include <stdio.h>
#include <stdlib.h>

void main()
{
	int i,pom;
	int **p;

	p = (int **) malloc(v * sizeof(int *));

	for(i = 0; i < v; i++)

  		p[i] = (int *) malloc(s * sizeof(int));

	for (i=0;i<v;i++){
		for (pom=0;pom<s;pom++){
			p[i][pom]=rand()%5+1;
			printf("%d ",p[i][pom]);
			if(pom==99) printf("\n");
		}
	}
}
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Pozor, v druhom pripade vytvoris pole pointrov, pricom kazdy pointer ukazuje na nejaku nesuvislu pamat, co odporuje zadaniu, ze udaje maju byt v suvislom bloku pamate.
picuge
Expert
Expert
Príspevky: 167
Registrovaný: 17 dec 2005, 20:38
Bydlisko: Bratislava/Martin

Príspevok od používateľa picuge »

nj pravdu mas, trochu som tu podmienku preskocil :D, takze to prve riesenie bude asi predsa len lepsie...
Napísať odpoveď