Tablice jednowymiarowe, wielowymiarowe oraz dynamiczna alokacja pamięci

Tablice jednowymiarowe, wielowymiarowe oraz dynamiczna alokacja pamięci

Wątek przeniesiony 2017-12-27 17:15 z C/C++ przez kq.

CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0

Dla wiersza dostaje dostaje bardzo duży wynik, kompiluje to:

Kopiuj
#include <stdio.h>
#include <stdlib.h>

void wczyt2D(int x, int y, int tab[x][y]);
int *computeSRC(int x, int y, int tab[x][y], int w, int k);





int main()
{
int x,y;
printf("\n Podaj ilosc wierszy [x][] tablicy:");
scanf("%d", &x);
printf("\n Podaj ilosc kolumn [][y] tablicy:");
scanf("%d", &y);

int tab[x][y];
wczyt2D(x,y,tab);

int w,k;
printf("\n Podaj numer wiersza:");
scanf("%d", &w);
printf("\n Podaj numer wybranej kolumny:");
scanf("%d", &k);

//int sumaW;
//sumaW=computeSRC(x,y,tab,w,k);
//printf("\n Suma elementow wiersza wynosi: %d", sumaW);
//int sumaK;
//sumaK=computeSRC(x,y,tab,w,k);
//printf("\n Suma elementow kolumny wynosi: %d", sumaK);


int *numbers;
numbers = computeSRC(x,y,tab,w,k);


       printf("\n Suma elementow wiersza wynosi: %d", numbers[0]);
       printf("\n Suma elementow kolumny wynosi: %d", numbers[1]);



    free(numbers); // Zwolnienie używanego obszaru pamięci.



    return 0;
}

void wczyt2D(int x, int y, int tab[x][y])
{
    int i;
    int j;
    for(i=0;i<x;i++)
    {
        for(j=0;j<y;j++)
        {
            printf("\n Podaj element tablicy nr [%d][%d]:",i,j);
            scanf("%d", &tab[i][j]);
        }
    }
}
int *computeSRC(int x, int y, int tab[x][y], int w, int k)
{
    int *sums = malloc(sizeof(int) * 2);
    sums[0] = sums[1] = 0;
    // Albo lepiej z inicjalizacją 2 elementów do 0:
    *sums = calloc(2, sizeof(int));

    int i;
    // Oblicz sumę wierszu w
    for(i=0;i<y;i++)
    {
        sums[0] += tab[w][i];
    }

    // Oblicz sumę kolumny k
    for(i=0;i<x;i++)
    {
        sums[1] += tab[i][k];
    }

    // Zwróć wskaźnik
    return sums;
}





atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
0

Czytasz co piszę czy tylko CTRL+C i CTRL+V?

Masz użyć albo

Kopiuj
int *sums = malloc(sizeof(int) * 2);
sums[0] = sums[1] = 0;

albo

Kopiuj
int *sums = calloc(n, sizeof(int));

Teraz starasz się przypisać adres zwracany z calloc do tego na co wskazuje sums a więc pierwszy element tablicy, co powoduje bzdurne wartości.

CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0

Nie możemy się dogadać :/ Gdzie ta tablica? Bo juz się w tym pogubiłem

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
1

Całość:

Kopiuj
#include <stdio.h>
#include <stdlib.h>

void wczyt2D(int x, int y, int tab[x][y]);
int *computeSRC(int x, int y, int tab[x][y], int w, int k);

int main()
{
    int x, y;
    printf("\n Podaj ilosc wierszy [x][] tablicy:");
    scanf("%d", &x);
    printf("\n Podaj ilosc kolumn [][y] tablicy:");
    scanf("%d", &y);

    int tab[x][y];
    wczyt2D(x, y, tab);

    int w, k;
    printf("\n Podaj numer wiersza:");
    scanf("%d", &w);
    printf("\n Podaj numer wybranej kolumny:");
    scanf("%d", &k);

    int *numbers;
    numbers = computeSRC(x, y, tab, w, k);

    printf("\n Suma elementow wiersza wynosi: %d", numbers[0]);
    printf("\n Suma elementow kolumny wynosi: %d", numbers[1]);

    free(numbers); // Zwolnienie używanego obszaru pamięci.

    return 0;
}

void wczyt2D(int x, int y, int tab[x][y])
{
    int i;
    int j;
    for (i = 0; i < x; i++)
    {
        for (j = 0; j < y; j++)
        {
            printf("\n Podaj element tablicy nr [%d][%d]:", i, j);
            scanf("%d", &tab[i][j]);
        }
    }
}

int *computeSRC(int x, int y, int tab[x][y], int w, int k)
{
    int *sums = calloc(2, sizeof(int));

    int i;
    for (i = 0; i < y; i++)
    {
        sums[0] += tab[w][i];
    }

    for (i = 0; i < x; i++)
    {
        sums[1] += tab[i][k];
    }

    return sums;
}
CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0

Dzięki, pozdrawiam :)

tajny_agent
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1340
0
Kopiuj
void wczyt2D(int x, int y, int tab[x][y]);

To wam się w ogóle kompiluje?

atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
0

Tak, nawet działa :D

Zobacz tutaj.

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.