Cześć. Potrzebuję pomocy z tym zadaniem:
Napisz funkcję sprawdzającą czy macierz, przekazana za pomocą wskaźnika, jest diagonalnie dominująca.
Prototyp funkcji powinien wyglądać następująco:
int dd_test(const int *ptr, int width, int height);
Parametry:
- ptr - wskaźnika na tablicę typu int o długości width*height elementów. Kolejne komórki macierzy ułożone są wierszami, tzn. po ostatnim elemencie wiersza o indeksie 0 następuje element o indeksie 0 wiersza o indeksie 1.
- width, height - liczba kolumn oraz wierszy macierzy.
Wartość zwrócona:
- 0 - jeżeli macierz nie jest diagonalnie dominująca,
- 1 - jeżeli macierz jest diagonalnie dominująca,
- -1 - jeżeli nie będzie możliwe sprawdzenie czy macierz jest diagonalnie dominująca.
Napisz program, który pobierze od użytkownika macierz o wymiarach 5x5 (jako tablicę 2D) i korzystając z napisanej wcześniej funkcji, sprawdzi, czy macierz ta jest diagonalnie dominująca.
Program powinien wypisać w konsoli YES, jeżeli macierz jest diagonalnie dominująca lub NO w przeciwnym przypadku.
W przypadku podania błędnych danych program powinien wyświetlić komunikat Incorrect input i zakończyć działanie z kodem błędu 1.
Przykładowa interakcja z programem -- sukces:
Podaj liczby: ⏎
-227 21 48 45 39 ⏎
71 -346 72 16 61 ⏎
42 72 -434 90 74 ⏎
8 14 97 -155 31 ⏎
52 14 9 60 -136 ⏎
YES
Podaj liczby:
0 0 0 0 0 ⏎
0 0 0 0 0 ⏎
0 0 0 0 0 ⏎
0 0 0 0 0 ⏎
0 0 0 0 0 ⏎
NO
Przykładowa interakcja z programem -- błędy danych wejściowych:
Podaj liczby: yi⏎
Incorrect input
Wskazówka:
- W macierzy diagonalnie dominującej dla każdego wiersza moduł elementu na diagonali jest większy od sumy modułów pozostałych elementów macierzy w tym wierszu.
Uwagi
- Nie wolno używać operatora [].
Oto mój kod:
#include <stdio.h>
#include <stdlib.h>
int dd_test(const int*ptr,int width,int height )
{
if( width != height || ptr == NULL )
return - 1;
int i, j, sdiagonali = 0, swierszy = 0;
for(i=0;i<height;i++)
{
for( j = 0; j < width; j++, ptr++ )
{
if(i==j)
{
sdiagonali+=abs(*ptr);
}
else
{
swierszy+=abs(*ptr);
}
}
}
if( sdiagonali<=swierszy )
{
return 0;
}
return 1;
}
#define SIZE 5
int main()
{
int *tab;
tab = (int*)malloc(sizeof(int) * SIZE*SIZE);
int i, height=SIZE,width=SIZE;
int * ptr;
ptr = tab;
printf( "Podaj liczby: \n" );
for( i = 0; i < (SIZE*SIZE); i++ )
{
int x=scanf( "%d", ptr + i );
if(x!=1)
{
printf( "Incorrect input");
return 1;
}
}
switch( dd_test(ptr,width, height))
{
case 0:
printf( "NO" );
break;
case 1:
printf( "YES" );
break;
}
return 0;
}
Po wrzuceniu tego kodu do Dante(silnik sprawdzający poprawność kodów) wyskoczył mi taki błąd:
Błąd: Brak deklaracji tablicy dwuwymiarowej w kodzie!
Ostrzeżenie: Wykryto problemy podczas analizy statycznej programu
Przesłana odpowiedź wymaga poprawy!