deklaracja macierzy w C

deklaracja macierzy w C
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 lat
  • Postów:5
0

Witam, w temacie programowania jestem totalnie zielona .. nie ogarniam tego .. a mam niestety do napisania program który oblicza macierze najpierw 2x2 a później 3x3.. i jest tam dodawanie, odejmowanie, mnożenie oraz odwrotność macierzy ale to mniejsza z tym .. chodzi o sam początek .. nie umiem zadeklarować macierzy tak aby uruchamiając program to ja mogłabym wpisywać wartości jakie mają się pojawić w danej macierzy ... jak to zrobić ? za pewnie to jest banalnie łatwe .. ale nie dla mnie , proszę o pomoc ...

badumts
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:19
0

Masz już jakiś kod?

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
2

Kusi mnie by podać linka do kodu dla podobnego tematu, ale jestem przeciwnikiem gotowców.
Dam tylko mały fragment, jako wskazówkę:

Kopiuj
// deklaracje z nagłówka:
struct MMatrixDouble;
typedef struct MMatrixDouble *MMatrixDoubleRef;

void MMatrixDoubleFree(MMatrixDoubleRef m);
MMatrixDoubleRef MMatrixDoubleCreate(int rowCount, int columCount);
MMatrixDoubleRef MMatrixDoubleCreateMul(MMatrixDoubleRef a, MMatrixDoubleRef b);
double MMatrixDoubleGet(MMatrixDoubleRef m, int row, int column);
void MMatrixDoubleSet(MMatrixDoubleRef m, int row, int column, double v);
int MMatrixDoubleGetRows(MMatrixDoubleRef m);
int MMatrixDoubleGetColumns(MMatrixDoubleRef m);
void MMatrixDoubleFPrint(MMatrixDoubleRef m, FILE *f);
void MMatrixDoubleFScan(MMatrixDoubleRef m, FILE *f);
MMatrixDoubleRef MMatrixDoubleCreateFScan(int rowCount, int columCount, FILE *f);

// definicje w *.c
struct MMatrixDouble
{
    int rowCount;
    int columnCount;
    double m[];
};

void MMatrixDoubleFScan(MMatrixDoubleRef m, FILE *f)
{
    double *a = m->m;
    for (int row = 0; row < m->rowCount; ++row) {
        for (int col = 0; col < m->columnCount; ++col) {
            fscanf(f, "%lg", a);
            ++a;
        }
    }
}

MMatrixDoubleRef m = MMatrixDoubleCreate(4, 4);
MMatrixDoubleFScan(matrix, stdin);

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 lat
  • Postów:5
0
badumts napisał(a):

Masz już jakiś kod?

coś tam próbowałam ale jest jakis błąd ..
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include <stdlib.h>

int main()
{
int i,j;
int x1,x2,x3,x4;
int macierzA[2][2]={x1,x2,
x3,x4};

for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
printf("%-4d",macierzA[i][j]);
printf("\n");
}

getch();
return 0;
}

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
1

Chodzi Ci o taki zapis?

Kopiuj
int macierzA[2][2]={
    {1, 2},
    {3, 4},
};
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 lat
  • Postów:5
0

tak tylko chciałabym żeby móc wprowadzać dane do macierzy po uruchomieniu programu (nie wiem czy jasno się wyrażam :/ jeśli nie to przepraszam )

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
1
Kopiuj
int macierzA[2][2];

macierzA[0][0]=1;
macierzA[0][1]=2;
macierzA[1][0]=3;
macierzA[1][1]=4;

lub w pętli (podobnie jak wypisujesz).

edytowany 1x, ostatnio: Delor
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
0

@amebaumyslowa1234 co ty potrzebujesz konkretnie?
Rozumiem, że chcesz wyczytać macierz ze standardowego wejścia. Pytanie czy rozmiar macierzy masz ustalony sztywno, czy też jest wczytywany ze standardowego wejścia?

Do poczytania: http://www.cplusplus.com/reference/cstdio/scanf/


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 lat
  • Postów:5
0

49351211_2221677237872172_1606254198893051904_n.jpg

mam taki projekcik do zrobienia i po prostu nie wiem jak zacząć znaczy sie to co wysłałam wcześniej to próbowałam ale no jak już pisałam jestem zerem w tej działce i nie mam w ogóle pomysłu na to

Zobacz pozostały 1 komentarz
A1
sorry ale tak jakby zalezy mi na czasie bo nie tylko to mam do zrobienia .. wiec jesli taie cos cię zniechęca do pomocy to dziękuję i żegnam
kq
Zależy ci na czasie, więc celowo utrudniasz innym pomoc tobie? Brawo.
A1
woow ale utrudnienie masakraaa.. przepraszam że żyje i że proszę o pomoc :)
MarekR22
naprawdę myślisz , że chodzi o stopień utrudnienia? To jest raczej niechęć do zagłaskiwania leni.
A1
ehh.. dobrze niech ci będzie :))) nie musisz mi pomagać .. nawet nie chce twojej pomocy .. więc żegnam :) Pozdrawiam, LEŃ.
A1
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 lat
  • Postów:5
0

i nie oczekuje że ktoś to za mnie zrobi tylko po prostu potrzebuje jakichkolwiek rad, wskazówek jak to zrobić, jak zacząć , cokolwiek ...

elwis
  • Rejestracja:ponad 18 lat
  • Ostatnio:4 dni
1

Macierze najlepiej się implementuje na tablicach. Można próbować tablic ze wskaźników jak wskazywano u góry, ale to rozwiązanie kiepsko się skaluje, lepiej zrobić jedną tablicę, np:

Kopiuj
int macierz[szer * wys];

wówczas dostęp do elementu o współrzędnych x,y (numeracja od zera):

Kopiuj
macierz[x + y*szer];

aby wykonać coś dla każdego elementu macierzy zwykle robimy wówczas:

Kopiuj
for(int y = 0; y < wys; y++) {
    for(int x = 0; x < szer; x++) {
        // tu jakaś akcja
    }
}

możemy tam wstawić cokolwiek, wczytać element (prawdopodobnie funkcją scanf), wypisać element (prawdopodobnie printf), czy też zmienić wartość. Np. zakładając że mamy 2 macierze: A i Bo tym samym rozmiarze i chcemy dodać B do A:

Kopiuj
for(int y = 0; y < wys; y++) {
    for(int x = 0; x < szer; x++) {
        A[x + y*szer] += B[x + y*szer];
    }
}

To absolutna podstawa. Z czasem powinnaś dążyć do rozwiązania, które proponuje @MarekR22, ono pozwala odseparować przeliczanie adresów, unikając duplikowania kodu i robienia głupich błędów, ale na początek skup się na podstawach.


edytowany 6x, ostatnio: elwis

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.