Permalänk
Medlem

nummer på array i C

Hej,
jag har nyss börjat lära mig programera i c, men nu har jag stött på problemoch vore tacksam för hjälp.
jag ska göra ett "biobokningssystem" och använder en array (har för mig att det heter så) för att visa platserna, men nu vill jag infoga rad och kolumn nummer och vet inte hur jag ska gör.
Tacksam för snabba svar.

/MVH

Permalänk
Hedersmedlem

Jag skulle nog ha en array av rader.

Visa signatur

Every time you create an iterator: God kills a kitten.

Permalänk
Medlem

Du kan även skapa en två-dimensionell array... array[][]

Permalänk
Avstängd

Engelska

Skrivet av fredda11:

Hej,
jag har nyss börjat lära mig programera i c, men nu har jag stött på problemoch vore tacksam för hjälp.
jag ska göra ett "biobokningssystem" och använder en array (har för mig att det heter så) för att visa platserna, men nu vill jag infoga rad och kolumn nummer och vet inte hur jag ska gör.
Tacksam för snabba svar.

/MVH

Är det viktigaste att du kan om du skall lära dig programmera.
Här hittar du.

Permalänk
Medlem

En struct är också ett alternativ.

Visa signatur

Assembly är ett högnivåspråk.

Permalänk
Hedersmedlem
Skrivet av Gramner:

En struct är också ett alternativ.

Typ så jag tänkte också. Om man inte vill ha dynamisk minnesallokering kan man t.ex:

typedef struct { int numSeats; Seat seats[MAX_SEATS_PER_ROW]; } Row; int main() { Row rows[NUM_ROWS]; }

Visa signatur

Every time you create an iterator: God kills a kitten.

Permalänk
Medlem
Skrivet av MartenKL:

Är det viktigaste att du kan om du skall lära dig programmera.
Här hittar du.

Jag hade googlar runt och letat (men på svenska då är inte så vidare bra på engelska) då hamnade jag här. Tack för hjälpen ska försöka få det att fungera. Om det inte vill som jag vill hör jag av mig igen

/ MVH

Ps. Är det för c# eller c++? ds.

Permalänk
Hedersmedlem
Skrivet av fredda11:

Jag hade googlar runt och letat (men på svenska då är inte så vidare bra på engelska) då hamnade jag här. Tack för hjälpen ska försöka få det att fungera. Om det inte vill som jag vill hör jag av mig igen

/ MVH

Ps. Är det för c# eller c++? ds.

C. Varken C# eller C++ med andra ord.

Visa signatur

Asus B550M-Plus / Ryzen 5800X / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + HDDs / Corsair RM650x / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem

jag lyckades inte hitta riktigt det jag ville på den där sidan (eller så förstog inte jag riktigt vade det stod).

jag vill kunna göra så det ser ut så här:
0 1 2 3 4 5 6
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0

fast nu ska den vara större.
vore bra om någon visste hur man gör eller om mågon länkar.
/ MVH

Permalänk
Medlem

Jag brukar allokera en 1D-array på vanligt sätt.

int* arr = calloc(sizeof(int)*num_rows*num_cols);

Du kan då få urt värdet på rätt position genom att göra arr[row*num_cols + col].
t.ex.

arr[row*num_cols + col] = val;

för att sätta värdet på row/col till val.

Glöm inte att frigöra ditt minne med

free(arr);

Du kan ju byta ut int mot en typ som har den information du behöver lagra per plats (bokningsnummer etc.), och ev wrappa salongsinformationen i ett "objekt" så du kan göra nått liknane

struct salon* salon = salon_create(num_rows, num_cols); int val = salon_get(salon, r, c); val += 1; salon_set(salon, val, r, c); salon_destroy(salon);

Om du känner till antal rader och kolumner när programmet kompileras kan du allokera minne statiskt också.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem
Skrivet av jdv:

Jag brukar allokera en 1D-array på vanligt sätt.

int* arr = calloc(sizeof(int)*num_rows*num_cols);

Du kan då få urt värdet på rätt position genom att göra arr[row*num_cols + col].
t.ex.

arr[row*num_cols + col] = val;

för att sätta värdet på row/col till val.

Glöm inte att frigöra ditt minne med

free(arr);

Du kan ju byta ut int mot en typ som har den information du behöver lagra per plats (bokningsnummer etc.), och ev wrappa salongsinformationen i ett "objekt" så du kan göra nått liknane

struct salon* salon = salon_create(num_rows, num_cols); int val = salon_get(salon, r, c); val += 1; salon_set(salon, val, r, c); salon_destroy(salon);

Om du känner till antal rader och kolumner när programmet kompileras kan du allokera minne statiskt också.

okej.....
det hjlpte mig lite men det är för komplicerat förstår inte vad du menar.
i alla fall fick jag den att skriva:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
så snart där.
vad menar du med att frigöra minnet? ska jag sätta den till en variabel eller vad?

/MVH

Permalänk
Medlem
Skrivet av fredda11:

okej.....
vad menar du med att frigöra minnet? ska jag sätta den till en variabel eller vad?

Den kod jag skrev allokerar en klump minne med hjälp av calloc (som kommer sätta allt innehåll i blocket till 0). Om man anropar nån av allocfunktionerna måste man anropa free på det man får ut därifrån efter man är klar med minnet, annars kommer programmet "läcka".

Minnet som hämtas ut behandlar jag som en array, precis som vanligt när du skriver int[16] arr; och för att ta ut en rad kolumn använder jag en formel för att få en unik position i arrayen för varje kombination av rad och kolumn man stoppar in (rad * antal_kolumner + kolumn).

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Det är fortfarande på för hög nivå, fick reda på att ag skulle användea mig av for lopar.

/MVH

Permalänk
Medlem

Du kan sätta for-loopar i for-loopar, så nått liknande

int row, col; for(row = 0; row < num_rows; ++row) { for(col = 0; col < num_cols; ++col) { int arr_pos = row*num_cols + col; // Gör något här. } }

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.