Kezdőoldal » Számítástechnika » Programozás » Dinamikus memóriakezeléssel...

Dinamikus memóriakezeléssel c-ben hogy lehet megoldani?

Figyelt kérdés

Írj függvényt, mely egy egész számokat tartalmazó tömböt kap paraméterként és létrehoz egy új tömböt, mely a számok átlagánál kisebb értékeket tartalmazza! A függvény neve legyen filter_average, térjen vissza a létrehozott tömb kezdőcímével, és mivel az új tömb méretét is ismernie kell a hívónak, ezt az információt a paraméterlistán keresztül, utolsó paraméterként adja vissza.


Például: 3 5 11 4 -1 2 (6 elemű tömb) -> 3 -1 2 (3 elemű tömb)



2021. nov. 3. 14:44
 1/9 anonim ***** válasza:
És hol akadtál el?
2021. nov. 3. 15:19
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
Akkor én most visszakérdeznék. Ezeknek a számoknak az átlaga 4,8, az új tömbben mégsincs benne a 4-es szám, pedig kisebb nála. Miért?
2021. nov. 3. 16:32
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:
2-es. Ez kiváló kérdés, nem én írom a feladatokat xdd.
2021. nov. 3. 16:37
 4/9 anonim ***** válasza:
Visszaszívom, mert elszámoltam és rosszul osztottam le...
2021. nov. 3. 16:39
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

Kedves kérdező, kommentem nem felhívás volt, hogy privát üzenetben írd le.

Ha szeretnél segítséget, szabályosan ide írd le a dolgokat

2021. nov. 3. 16:56
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:

Na szóval itt akadtam el:


#include <stdio.h>

#include <stdlib.h>


void filter_average(int* data, int n){

double atlag;

int sum=0;

int i,j;

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

sum+=data[i];

atlag=sum/n;

2021. nov. 3. 17:52
 7/9 anonim ***** válasza:
Én csinálnék egy akkora tömböt, mint az első, beleraknám amik kisebbek az átlagnál, aztán realloc-oznám a megfelelő méretre és visszaadnám. Meg kéne még egy int pointer a paraméterlistába, amibe bele lehet írni majd az új méretet.
2021. nov. 3. 18:14
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:

#include <stdio.h>

#include <stdlib.h>


void filter_average(int* data, int n){

double atlag;

int sum=0;

int i,j;

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

sum+=data[i];

atlag=sum/n;

int *tomb[100];

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

{if(data[i]<atlag)

{for(j=0; j<n; j++)

{*tomb[j]=data[i];}}}

tomb=realloc(tomb, j*sizeof(int));

free(tomb);

int* a=j;

}


Még így se teljesen jó, de alakul xdd.

2021. nov. 3. 18:38
 9/9 anonim ***** válasza:

Hát nem csoda hogy nem jó, ránézek, és felugrik a vérnyomásom.

Pointerek, tömbök és típusok ismeretének teljes hiányára engedsz következtetni.

Szeretném, ha ugyanezt a kódot leírnád nekem sorrol-sorra kommentezve, hogy melyik sorban mit csinálsz!

De azért 1-2 sorhoz én is fűznék megjegyzést:

int *tomb[100]; //létrehozol egy 100 elemű tömböt a VERMEN, ami int*-okat tárolhat, vagyis a típusa megegyezik az int**-al kb.

Erre a STACKen tárolt tömbre mit csinálsz? Fogod a rá mutató pointert (mert a tomb az megegyezik nyelvi működés miatt ezzel: &(tomb[0]) ), és erre realloc-ot hívsz. Mit akarsz realloc-olni? Talán ez a változó calloc vagy malloc függvénnyel létrehozott dinamikus tömb? Nope.

Aztán hogy realloc-oltad, azelőtt hogy felhasználhatná bárki is, ráhívod a free-t, vagyis törlöd a p....ba.

Arról már nem is merek említést tenni, hogy utolsó sorban egy pointer kezdőértékének nem pointert adsz, hanem egy intet. De ez mindegy, mert véget ér a függvény, az is törlődik a g....be.

Szóval csak logikusan sorrol-sorra gondold át, és írd le melyik sor mit csinál, mit kéne csináljon, és az alapján haladj.

Amit meg nem tudsz, ne próbáld tákolni, mert 6% az esélye hogy eltalálod hibátlanul a szintaxist, inkább pótold be a hiányzó tudást, amik egyelőre ezek:

- Típusok

-- (ezen belül még extra:) pointerek

- Pointerek kezelése, értékadása, hivatkozása

- (statikus) tömbök, műveletek tömbökkel, tömb kezelése pointerként

- Dinamikus memória működése, pointerek a dinamikus memória tekintetében

- Változók életciklusa, megszűnése

2021. nov. 3. 19:23
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!