C - funkce,pole...

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

C - funkce,pole...

Příspěvek od Václav Sedlář »

Dobrý den, ve škole jsem dostal zadání:

Kód: Vybrat vše

1)napsat funkci alokuj_pole int velikost, jednorozměrné pole float, velikost je předána parametrem
pole bude vráceno jako:
a)návratová hodnota funkce
b)předáno jako parametr volaný odkazem
a já jaksi nevím rozdíl mezi a) a b)...jaká bude definice funkce a return u a,b? Moc dekuji za odpověď...
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od arxeiss »

Absolutně nechápu zadání, např toto alokuj_pole int velikost. Co to má znamenat? jako že budu mít alokuj_pole(int velikost) v něm jednorozměrné pole floatové. A pak vrátím jednou návratovou hodnotou, a podruhé parametrem?
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od Václav Sedlář »

právě...taky mi to je divný..ale je to doslova přesně opsané z tabule :x

edit: jelikož pak budeme dál v programu dělat s dvěma polema, tak to asi bude jako alokovat jedno pole o velikosti int a pak ještě jedno pole float (asi)...a pro jedno bude platit za a) a pro druh= za b)...
zombux
Odborník PCT
Odborník PCT
Uživatelský avatar
Registrován: 05. čer 2003
Bydliště: sluníčkář a havloid z pražské lumpenkavárny

Re: C - funkce,pole...

Příspěvek od zombux »

jo tohle jsme kdysi dělali, jen jsem to už dokonale zapomněl. Heroutova učebnice céčka to vysvětluje detailně, nalistuj :)
ignorelist: kremrole a dezoláti
Saphire
Začátečník
Začátečník
Uživatelský avatar
Registrován: 17. kvě 2009

Re: C - funkce,pole...

Příspěvek od Saphire »

Václav Sedlář píše:...
V kroku A se vrátí pole tak jak je, zatímco v kroku B se pole zapíše do ukazatele, předáného funkci jako argument.
MB: Fujistu-Siemens D1961 CPU: Intel P4HT 521 2.8Ghz GPU: ATI Radeon 9600 Atlantis 128MB RAM: 2x1GB DDR400 ADATA PREMIER HDD: 2x 40GB Samsung SP0411c, 250GB WD Caviar D2500AAJB-00J3A0 OS: Windows XP/Linux Mndriva 2010.2
Airsoft archivements: Bloody BB, Amphibious operations, Calm under fire, Sugar rush, Dance, F**ker Dance!, Speedy Gonzales, 1 of 300
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od arxeiss »

Saphire píše:V kroku A se vrátí pole tak jak je, zatímco v kroku B se pole zapíše ADRESA POLEdo ukazatele, předáného funkci jako argument.
Ti tam chybělo, a je to rozdíl! Ale stejně nechápu logiku bodu A, tam si musíš vytvořit to pole jak v mainu, tak v té funkci, a pak po naplnění ho vrátíš do mainu, ale tam se musí někam uložit, takže je alokované 2x... U B už je to logické, tam si ho vytvoříš v poli a pak v mainu pracuješ už jenom s pointrem.
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od Václav Sedlář »

mno takto je celé zadáni:

Kód: Vybrat vše

1)napsat funkci alokuj_pole int velikost, jednorozměrné pole float, velikost je předána parametrem pole bude vráceno jako:
a)návratová hodnota funkce
b)předáno jako parametr volaný odkazem

2)funkci napln_pole která naplní pole jakkoliv

3)funkci, která převezme jako parametry dvě pole (vytvořené funkcí výše) a porovná je na základě hodnot v poli uložených. Bude vracet:
a)0...pokud jsou pole stejná
b)1..pokud v poli 1 jsou vyšší hodnoty
c)2..pokud jsou hodnoty v poli1 nižší

4)funkci co vypočte vážený průměr (váhy volte dle vlastního uvážení) z hodnot ullžených v poli

Maranov
Mírně pokročilý
Mírně pokročilý
Uživatelský avatar
Registrován: 21. črc 2006

Re: C - funkce,pole...

Příspěvek od Maranov »

Jako návratová funkce:

Kód: Vybrat vše

float *alokuj_pole(int velikost)
{
	return malloc(sizeof(float) * velikost);
}
Funkce alokuje dynamicky pole a předá adresu na něj v return.

Kód: Vybrat vše

void alokuj_pole(int velikost, float** pole)
{
	*pole = malloc(sizeof(float) * velikost);
}
To samé v parametru předávaného odkazem (vstupně-výstupní parametr).

Takhle to chápu já. Klasické array předat nemůžeš, array je de facto ukazatel na první prvek a v momentě ukončení fce by pole bylo zničeno.
DESKTOP: C2D E8200 (pasivně); ATI HD 3870 (AC S1, 120 fan@5V); 4GB RAM; OCZ Vertex2 SSD 64GB; 320+320+250GB JBOD (odhlučněno); 2x FSC P19-2 (2056x1024)
MOBILE: Lenovo Thinkpad T420 4177 CTR, Crucial M4 SSD 128GB, 6GB RAM; FSC P19-2; Logitech G400
POCKET: Nokia Hulmia 800; Hitachi 500GB@Scythe Kamazo 2 (eSATA); Creative EP-630
AUDIO: Sennheiser HD 555 (foam mod), NuForce Icon µDAC, FLAC, ReplayGain, f2k

"A Man's mortality is a compass that points his way in life."
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od Václav Sedlář »

ok, děkuji...zkusím... ;-)
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od Václav Sedlář »

Maranov píše:Jako návratová funkce:

Kód: Vybrat vše

float *alokuj_pole(int velikost)
{
	return malloc(sizeof(float) * velikost);
}
píše chybu:

Kód: Vybrat vše

Error	1	error C2440: 'return' : cannot convert from 'void *' to 'float *'
Saphire
Začátečník
Začátečník
Uživatelský avatar
Registrován: 17. kvě 2009

Re: C - funkce,pole...

Příspěvek od Saphire »

Než to vrátíš, musíš to ještě přetypovat na float*.

Kód: Vybrat vše

float *alokuj_pole(int velikost)
{
   return (float*)malloc(sizeof(float) * velikost);
}
MB: Fujistu-Siemens D1961 CPU: Intel P4HT 521 2.8Ghz GPU: ATI Radeon 9600 Atlantis 128MB RAM: 2x1GB DDR400 ADATA PREMIER HDD: 2x 40GB Samsung SP0411c, 250GB WD Caviar D2500AAJB-00J3A0 OS: Windows XP/Linux Mndriva 2010.2
Airsoft archivements: Bloody BB, Amphibious operations, Calm under fire, Sugar rush, Dance, F**ker Dance!, Speedy Gonzales, 1 of 300
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: C - funkce,pole...

Příspěvek od Václav Sedlář »

ok, dík...už to funguje....
jen ještě ten druhej případ:

Kód: Vybrat vše

void alokuj_pole2(int velikost, float* pole)
{
   *pole = malloc(sizeof(float) * velikost);
}
ja vypadá vyvolání funkce? takto:

float *p_f;
alokuj_pole(velikost, p_f);
:?:
Saphire
Začátečník
Začátečník
Uživatelský avatar
Registrován: 17. kvě 2009

Re: C - funkce,pole...

Příspěvek od Saphire »

Ano, přesně tak!
Ale funkce musí vypadat takhle: 1) alokovanou paměť přiřazujeme do ukazatele, nikoliv do obsahu proměnné ( *pole je obsah promenné, pole je ukazatel)
2) lepší je VŽDY (i když je to nepovinné) přetypovávat.

Kód: Vybrat vše

void alokuj_pole2(int velikost, float* pole)
{
   pole = (float*)malloc(sizeof(float) * velikost);
}
MB: Fujistu-Siemens D1961 CPU: Intel P4HT 521 2.8Ghz GPU: ATI Radeon 9600 Atlantis 128MB RAM: 2x1GB DDR400 ADATA PREMIER HDD: 2x 40GB Samsung SP0411c, 250GB WD Caviar D2500AAJB-00J3A0 OS: Windows XP/Linux Mndriva 2010.2
Airsoft archivements: Bloody BB, Amphibious operations, Calm under fire, Sugar rush, Dance, F**ker Dance!, Speedy Gonzales, 1 of 300
Odpovědět

Zpět na „Programování a web“