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 ...

- Rejestracja:około 17 lat
- Ostatnio:minuta
Kusi mnie by podać linka do kodu dla podobnego tematu, ale jestem przeciwnikiem gotowców.
Dam tylko mały fragment, jako wskazówkę:
// 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);
- Rejestracja:około 6 lat
- Ostatnio:około 6 lat
- Postów:5
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;
}
- Rejestracja:około 6 lat
- Ostatnio:około 6 lat
- Postów:5
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 )

- Rejestracja:około 17 lat
- Ostatnio:minuta
@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/
- Rejestracja:około 6 lat
- Ostatnio:około 6 lat
- Postów:5
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
- 49351211_2221677237872172_1606254198893051904_n.jpg (213 KB) - ściągnięć: 85


- Rejestracja:około 6 lat
- Ostatnio:około 6 lat
- Postów:5
i nie oczekuje że ktoś to za mnie zrobi tylko po prostu potrzebuje jakichkolwiek rad, wskazówek jak to zrobić, jak zacząć , cokolwiek ...

- Rejestracja:ponad 18 lat
- Ostatnio:3 dni
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:
int macierz[szer * wys];
wówczas dostęp do elementu o współrzędnych x,y (numeracja od zera):
macierz[x + y*szer];
aby wykonać coś dla każdego elementu macierzy zwykle robimy wówczas:
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 B
o tym samym rozmiarze i chcemy dodać B
do A
:
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.