Programming
Początkujacy: Jak zaalokować tablicę dwuwymiarowa dynamicznie za pomocą
Funkcji
Bez funkcji
13 sty 22:52
Początkujacy: Może też być macierz
13 sty 22:53
Początkujacy: W języku C
13 sty 23:00
Początkujacy: Czy mozna nadać tej tablicy jakieś wartości np.
1 2
3 5
13 sty 23:14
14 sty 01:50
Mariusz:
typ **A;
int m,n,k;
scanf("%d %d",&n,&m);
A=(typ **)malloc(n*sizeof(typ))
for(k=0;k<n;k++)
A[k]=(typ *)malloc(m*sizeof(typ));
14 sty 02:37
Pytający:
Mariusz, w pierwszym wywołaniu malloca powinno być malloc(n*sizeof(typ*)), alokujesz
tablicę wskaźników.
14 sty 02:43
Dziadek Mróz:
#include <stdio.h>
#include <stdlib.h>
#define X 3
#define Y 3
void matrix(int **tab, int x, int y) {
tab = (int **)malloc(X * sizeof(int *));
for (size_t x=0; x<X; x++) {
tab[x] = (int *)malloc(Y * sizeof(int));
for (size_t y=0; y<Y; y++) {
scanf("%d", &tab[x][y]); // 0 1 2 ... 9
}
}
}
void free_matrix(int **tab, int x) {
for (size_t x=0; x<X;x++) {
free(tab[x]);
}
free(tab);
}
void print_matrix(int **tab, int x, int y) {
for (size_t x=0; x<X; x++) {
for (size_t y=0; y<Y; y++) {
printf(" %d", tab[x][y]);
}
printf("\n");
}
/* 0 1 2
3 4 5
6 7 8 */
}
int main() {
int **tab;
tab = (int **)malloc(X * sizeof(int *));
for (size_t x=0; x<X; x++) {
tab[x] = (int *)malloc(Y * sizeof(int));
for (size_t y=0; y<Y; y++) {
scanf("%d", &tab[x][y]); // 0 1 2 3 4 5 6 7 8
}
}
print_matrix(tab, X, Y);
free_matrix(tab, X);
matrix(tab, X, Y);
print_matrix(tab, X, Y);
free_matrix(tab, X);
return 0;
}
14 sty 03:48
Początkujacy:
#include <stdio.h>
#include <stdlib.h>
void matrix(float **p,int n)
{
int i,j;
p = (float **)malloc(n*sizeof(float *));
for(i=0;i<n;i++)
{
p[i]=(float *)malloc(n*sizeof(float ));
for(j=0;j<n;j++)
{
scanf("%f",&p[i][j]);
}
}
}
void printmatrix(float **p,int n)
{
int i,j;
p = (float **)malloc(n*sizeof(float *));
printf("Elem tablicy X:\n");
for(i=0;i<n;i++)
{
p[i]=(float *)malloc(n*sizeof(float ));
for(j=0;j<n;j++){
printf("X[%d][%d]=%2.2f\t",i,j,p[i][j]);
}
printf("\n");
}
}
void freematrix(float **p,int n)
{
int i;
for(i=0;i<n;i++){
free(p[i]);
}
free(p);
}
int main()
{
float **p;
int n;
printf("Podaj elem. tab: ");
scanf("%d ",&n);
p=(float **)malloc(n*sizeof(float *));
matrix(p,n);
printmatrix(p,n);
freematrix(p,n);
return 0;
}
Chcialem zbudować z tego macierz i mi nie działa..
program prosi o podanie wartości
przykładowo 1 2 3 4
a pokazuje
X[0][0]=0.00
X[0][1]=0.00
X[1][0]=0.00
X[1][1]=0.00
14 sty 11:38
g:
float *tab, x;
int N=20, M=30; //wymiary tablicy 2D − to mogą być zmienne, stałe, parametry funkcji
//alokacja tablicy N x M
tab = (float*)malloc(N*M*sizeof(float));
//zakladam ze elementy w pamieci to [0,0], [0,1],..,[0,M−1],[1,0],...,[N−1,M−1]
//odwolanie do elementu [i,j]
x = tab[i*M+j];
//gdy tablica tab juz niepotrzebna to
free(tab);
14 sty 11:52
Początkujacy: Zrobilem podobne zadanie z dynamiczna tablica jednowymiarowa, które wychodzi w funkcji main,
natomiast , gdy tworze program przy pomocy 3 funkcji tworz, drukuj, freee program ten się
odpala i nie zgłasza bledu, ale tablica ta nie przyjmuje wartości podanych przez użytkownika.
#include <stdio.h>
#include <stdlib.h>
void tworz(float *p,int n)
{
int i;
p=(float *)malloc(n*sizeof(float));
printf("Podaj elem. tablicy p:\n");
for(i=0;i<n;i++)
{
scanf("%f",&p[i]);
}
}
void drukuj(float *p,int n)
{
int i;
p=(float *)malloc(n*sizeof(float));
for(i=0;i<n;i++)
{
printf("X[%d]=%2.2f",i,p[i]);
}
}
void freee(float *p,int n)
{
free(p);
}
int main()
{
float *p;
int n;
printf("Podaj liczbe el. tablicy dynamicznej: ");
scanf("%d",&n);
p=(float *)malloc(n*sizeof(float));
tworz(p,n);
drukuj(p,n);
freee(p,n);
return 0;
}
przykładowo dla n=2
X[0]=0.00
X[1]=0.00
14 sty 12:42
Początkujacy: Będę wdzięczny za pomoc
14 sty 12:42
Początkujacy:
float* tworz(float *p,int n)
{
int i;
p=(float *)malloc(n*sizeof(float));
printf("Podaj elem. tablicy p:\n");
for(i=0;i<n;i++)
{
scanf("%f",&p[i]);
}
return p;
}
To jedyny sposób aby zwrocic tablice dynamiczna?
14 sty 15:57