• 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.

Object Storage Arubacloud
0 głosów
431 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 (270,190 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,320 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,000 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ź 209 wizyt
pytanie zadane 1 grudnia 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 7 września 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
3 odpowiedzi 331 wizyt
pytanie zadane 3 grudnia 2017 w C i C++ przez MrSqoobany Początkujący (460 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...