Siemka, mam problem ze wstawieniem wartości do tablicy dynamicznej (która ma postać macierzy). Moim celem jest wprowadzenie do konkretnego miejsca w macierzy wartości podanej przez użytkownika (również koordynaty mają być podane przez użytkownika). Za to ma odpowiadać funkcja m_put. Zrobiłem ją tak, żeby użytkownik wprowadzał wartości (tj. koordynaty i nową wartość dla danego miejsca) wewnątrz funkcji, to znaczy w funkcji użyłem printfa i scanfa. Taka funkcja działała poprawnie, jednak niestety za późno zorientowałem się, że wartości muszą być wprowadzone z zewnątrz (przekazywane do funkcji, bez scanfa i printfa), no i tutaj pojawiły się schodki, ponieważ funkcja jest gotowa, natomiast nie działa poprawnie, wszystkie zmienne przekazywane są poprawnie (sprawdzałem, funkcja wypisywała je poprawnie), jednak nie wprowadza nowej wartości do macierzy w wyznaczonym miejscu. Czy mógłby mi ktoś wskazać błąd i go poprawić? Byłbym bardzo wdzięczny :)
Oto kody:
(Główny program, wywołuje także inne funkcje, one działają poprawnie, jednak mnie w tym momencie interesuje m_put2)
#include <stdio.h>
#include <stdlib.h>
#include "MACIERZ_S.h"
#include "m_create.c"
#include "m_scanf.c"
#include "m_printf.c"
#include "m_get.c"
#include "m_put2.c"
#include "m_remove.c"
int main () {
struct MACIERZ_S M;
scanf ("%d %d", &M.x, &M.y);
printf ("\n%d %d", M.x, M.y);
m_create (&M);
m_scanf (&M);
m_printf (&M);
int a,b,w; /* Tu zaczyna się pobieranie wartości do funkci m_put2 */
printf ("Podaj koordynaty zmiennej, ktora chcesz zmienic\n");
scanf ("%d %d", &a, &b);
printf ("Podaj wartosc: ");
scanf ("%d", &w);
m_put2 (&M,a,b,w);
m_printf (&M);
printf ("%d ", m_get(&M,1,1));
printf ("\nCzyszcze macierz...\n");
m_remove (&M);
printf ("Sprawdzam, czy macierz jest wyczyszczona...\n");
printf ("%d ", m_get(&M,1,1));
return 0;
}
(m_put2)
#include "MACIERZ_S.h"
#include "stdio.h"
int m_put2 (struct MACIERZ_S *MACIERZ, int a, int b, int wart) {
printf ("%d %d %d\n", a, b, wart);
if (( a > (*MACIERZ).x) || ( b > (*MACIERZ).y ))
return -1;
else
wart = (*MACIERZ).wsk[(*MACIERZ).y*(a-1)+(b-1)]; /* mam wrażenie, że jest to błąd merytoryczny */
return 0;
}
(Struktura MACIERZ_S)
#ifndef _MACIERZ_S_H
#define _MACIERZ_S_H
struct MACIERZ_S {
int x; //rozmiar - szerokosc
int y; //rozmiar - wysokosc
int *wsk; // "tablica" x na y
};
void m_create (struct MACIERZ_S *MACIERZ);
int m_remove (struct MACIERZ_S *MACIERZ);
int m_get (struct MACIERZ_S *MACIERZ, int a, int b);
#endif /* MACIERZ_S.h */
Wstawię także funkcje m_create i m_printf dla ułatwienia
void m_printf (struct MACIERZ_S *MACIERZ) {
for(i=0; i<(*MACIERZ).x ; i++) {
for(j=0; j<(*MACIERZ).y ; j++) {
printf("%d ", (*MACIERZ).wsk[(*MACIERZ).y*i+j]);
if (j == (*MACIERZ).y - 1)
printf ("\n");
}
}
return;
}
void m_create(struct MACIERZ_S *MACIERZ) {
printf("%d %d", (*MACIERZ).x, (*MACIERZ).y);
(*MACIERZ).wsk=malloc((*MACIERZ).y*(*MACIERZ).x*sizeof(int));
return;
}
Pozdro :)
PS Szczęśliwego nowego roku!