Vissza

Labor 6

Ritka mátrixok


Feladatok:

Készítsünk egy ritka mátrixokat kezelő programmodult. Írjuk meg a következő függvényeket:
1. ritka mátrix véletlenszerű generálása mátrix formába
2. ritka mátrix mátrixos formában való kiíratása a képernyőre
3. ritka mátrix mátrixos formában való kiíratása egy állományba
4. ritka mátrix háromsoros formába való átalakítása
5. ritka mátrix négysoros formába való átalakítása
6. ritka mátrix háromsoros ábrázolási formában való kiíratása a képernyőre
7. ritka mátrix négysoros ábrázolási formában való kiíratása a képernyőre

Példa háromsoros ábrázolási formára:
-1
-1
-1
-1
71
-1
-1
31
-1
-1
-1
-1
-1
-1
-1
-1
77
-1
-1
95
-1
-1
81
-1

Az értékeket tartalmazó tömb:
71
31
77
95
81

A sor indexeket tartalmazó tömb:
0
1
2
3
3

Az oszlop indexeket tartalmazó tömb:
4
1
4
1
4

A négysoros ábrázolás kiegészül a következő tömbbel, mely megadja a ritka mátrix ugyanazon oszlopának következő ritka elemét; ha nincs ilyen eleme, akkor az érték -1 lesz. A fenti példára ez a következő:
2
3
4
-1
-1

Pointer típusú változók paraméterátadása (hasznos lehet a három illetve négysoros ábrázolási formáknál):
void fugv1(int **k){
    (*k) = (int*)malloc(2*sizeof(int));
    (*k)[0] = 3;
    (*k)[1] = 4;
}

void fugv2(int **k){
    (*k) = (int*)realloc((*k), 2*sizeof(int));
    (*k)[0] = 5;
    (*k)[1] = 6;
}

//csak C++ alatt megy!!
void fugv3(int *&k){
    k = (int*)malloc(2*sizeof(int));
    k[0] = 1;
    k[1] = 2;
}

int main(){
    int * k = NULL;
    fugv1(&k);
    printf("%i\n%i\n", k[0],k[1]);

    fugv2(&k);
    printf("%i\n%i\n", k[0],k[1]);
   
    fugv3(k);
    printf("%i\n%i\n", k[0],k[1]);
    free(k);
    return 0;
}