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

Wskaźniki i tablice. Macierz diagonalnie dominująca.

Mały hosting, OGROMNE możliwości
0 głosów
858 wizyt
pytanie zadane 15 grudnia 2021 w C i C++ przez aironman Nowicjusz (120 p.)

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!

komentarz 15 grudnia 2021 przez Wiciorny Ekspert (283,260 p.)
a gdzie w twoim kodzie masz właśnie tablice dwuwymiarową?

Nawet bazując na wskaźnikach masz dalej 1 wymiarowe postacie
http://www.algorytm.edu.pl/tablice-w-c/tablice-wielowymiarowe.html
1
komentarz 15 grudnia 2021 przez Oscar Nałogowiec (29,360 p.)
W sumie to w treści zadania jest wymaganie na wewnetrzną strukturę macierzy, zbudowanej z macierzy jednowymiarowej, więc własnoręczna implementacja tych dwóch wymiarów jest naturalna.
komentarz 16 grudnia 2021 przez aironman Nowicjusz (120 p.)

już totalnie nie mam pomysłu jak poprawić mój kod

 

komentarz 18 grudnia 2021 przez TOWaD Mądrala (6,800 p.)

Sam się nie znam, na pierwszy rzut oka brakuje free();

to wygląda ok

z naszego forum

i ze stackoverflow

Jak się kiedyś bawiłem to c/c++ to zawsze w funkcji robiłem kopie wskaźnika i kopie tylko przesuwałem

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 413 wizyt
pytanie zadane 1 grudnia 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 532 wizyt
pytanie zadane 7 września 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
3 odpowiedzi 766 wizyt
pytanie zadane 3 grudnia 2017 w C i C++ przez MrSqoobany Początkujący (460 p.)

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...