• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zamiana iteracji na wskaźniki

Object Storage Arubacloud
0 głosów
191 wizyt
pytanie zadane 18 grudnia 2015 w C i C++ przez Wilier Bywalec (2,570 p.)

Hej, 

mam program, który z podanej macierzy oblicza macierz odwrotną. Pierwotnie do kopiowania, przeglądania, ogólnie operacji na macierzy korzystałem klasycznej iteracji. Muszę jednak przerobić tak program żeby wszędzie gdzie się da używać wskaźników. Wszystkie funkcje już przerobiłem i mam problem z funkcją obliczającą wyznacznik macierzy. Próbowałem już wszystkiego i za każdym razem program się wysypuje i mam błąd access violation location. Na czerwono zaznaczyłem miejsca do zamiany. Proszę o jakąkolwiek formę pomocy. 

pozdrawiam 

double det(int n, int w, int * WK, double ** A)
{
  int    i,j,k,m, * KK;
  double s;

  if(n == 1)
	  return **A;  //sprawdzamy warunek zakończenia rekurencji
    //return A[w][WK[0]];                         // macierz 1 x 1, wyznacznik równy elementowi
  else
  {

    KK = (int*) malloc ((n - 1)*sizeof(int));   // tworzymy dynamiczny wektor kolumn

    s = 0;                                      // zerujemy wartość rozwinięcia
    m = 1;                                      // początkowy mnożnik

    for(i = 0; i < n; i++)                      // pętla obliczająca rozwinięcie
    {   
		k=0;// tworzymy wektor kolumn dla rekurencji
      for(j = 0; j < n; j++)                // ma on o 1 kolumnę mniej niż WK
      {
        if(j == i)
			continue;							// pomijamy bieżącą kolumnę
        KK[k++] = WK[j];                    // pozostałe kolumny przenosimy do KK
	
	  }
	
	  if ( n==2 )                                 // jeżeli 2x2 to liczymy na krzyż i kończymy rekurencje
		return (A[w][WK[i]] * A[w+1][WK[i+1]] - A[w][WK[i+1]] * A[w+1][WK[i]]);
	  else {
      s += m * A[w][WK[i]] * det(n-1, w+1, KK, A);
      m = -m;                                   // kolejny mnożnik
    }
	}
    free (KK);                               // usuwamy zbędną już tablicę dynamiczną

    return s;                                   // ustalamy wartość funkcji

  
}
}

 

1 odpowiedź

0 głosów
odpowiedź 19 grudnia 2015 przez draghan VIP (106,230 p.)
Hej, ale przecież przy przekazywaniu tablicy do funkcji i tak kopiowany jest jedynie wskaźnik na pierwszy element, więc nie widzę za bardzo sensu w komplikowaniu sobie składni używaniem operatorów dereferencji...

A tak na marginesie, gdyby zmienne były sensownie nazwane, można by się było pokusić o przejrzenie tego programu. KK, A, s, j, m czy WK nie za wiele mi mówi. ;)
komentarz 19 grudnia 2015 przez Wilier Bywalec (2,570 p.)

z sensem bym nie dyskutował, bo to prowadzący zajęcia mi kazał :D 
a jeśli chodzi o nazwy to wydaje mi się, żę nie trzeba analizować całego kodu, k, j to iteratory, a WK, KK to macierze 

przynajmniej ten kawałek KK[k++] = WK[j]; 

Podobne pytania

0 głosów
2 odpowiedzi 1,167 wizyt
0 głosów
2 odpowiedzi 366 wizyt
pytanie zadane 14 listopada 2018 w C i C++ przez eSpring Początkujący (270 p.)
0 głosów
1 odpowiedź 272 wizyt
pytanie zadane 12 marca 2021 w C i C++ przez grzechur18 Nowicjusz (150 p.)

92,568 zapytań

141,422 odpowiedzi

319,639 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...