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

Minimalny element po przekątnej w tablicy.(tablica 2 wymiarowa)

VPS Starter Arubacloud
0 głosów
650 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez KuS018 Nowicjusz (180 p.)

Witam, otóż mam za zadanie, aby wypisać minimalny element po przekątnej w tablicy i zrobiłam to tak:

int mini (int t[][N])
{
    int M = t[0][0];
    for (int i = 0 ; i < N ; i++)
    if (t[i][i] < M)
    M = t[i][i];
    return M;
}

jednak cały czas wyskakuje mi inny element. Czy by mógł spojrzeć, gdzie zrobiłam błąd.

Z góry dzięki :D

komentarz 17 listopada 2018 przez jankustosz1 Nałogowiec (36,160 p.)
jeżeli tablica jest NxN to musi to działać, btw. zrób tabulatory bo dziwnie to wygląda
komentarz 19 listopada 2018 przez X3h Dyskutant (9,540 p.)

@KuS018, dla jakich danych jakiego oczekusz wyniku?

komentarz 19 listopada 2018 przez KuS018 Nowicjusz (180 p.)

@jankustosz1, w tym problem, że nie działa :/

1
komentarz 20 listopada 2018 przez jankustosz1 Nałogowiec (36,160 p.)
W ciemno zgaduję, że zle wczytujesz tablicę, np. xksy wpisujesz do ygreków

3 odpowiedzi

0 głosów
odpowiedź 21 listopada 2018 przez X3h Dyskutant (9,540 p.)
#include <iostream>
using namespace std;

int getMin(int **array, int size){
	
	int min = array[0][0];
	
	for(int i = 1 ; i < size ; ++i){
		if(array[i][i] < min){
			min = array[i][i];
		}
	}
	
	return min;
	
}

int main() {
	
	int size = 5;
	int **arr = new int*[size];
	
	for(int i = 0; i < size; ++i){
		arr[i] = new int[size];
	}
	
	arr[0][0] = 5;
	arr[1][1] = 3;
	arr[2][2] = 8;
	arr[3][3] = 9;
	arr[4][4] = 7;
	
	cout << getMin(arr, size) << endl;
	
	return 0;
	
}

 

0 głosów
odpowiedź 22 listopada 2018 przez KuS018 Nowicjusz (180 p.)

Z tym się udało, a teraz obliczanie sumy i ilości elementów pod główną przekątną. Wydaje mi się, że wszystko w kodzie jest w porządku, ale skoro nie działa to coś jest nie tak. I jak coś to z góry mamy narzucone jak ma wyglądać funkcja.

void pod_przek (int t[][N] , int&suma , int&ilosc)
{
     suma = 0;
     ilosc = 0;
    for(int i = 0 ; i < N ; i++)
    for(int j = i + 1 ; j < N - 1 ; j++)
        if ( t[i][j] > 0 and t[i][j] %2 == 0)
            {
                suma += t[i][j];
                ilosc ++;
            }
cout<<"Suma elementow dodatnich i parzystych pod przekatna wynosi:  "<<suma<<endl;
cout<<"ilosc elementow dodatnich i parzystych pod przekatna wynosi:   "<<ilosc<<endl;
}

 

–1 głos
odpowiedź 20 listopada 2018 przez mokrowski Mędrzec (156,260 p.)

Dobrze by było postawić nawiasy bloków kodu w for(...)... a i przy if'ie by się przydały... 

int mini (int t[][N])
{
    int M = t[0][0];
    for (int i = 0 ; i < N ; i++) {
        if (t[i][i] < M) {
            M = t[i][i];
        }
    }
    return M;
}

... kazali Ci nazywać zmienne z dużych liter? Nazwa tablicy z małej a nazwy zmiennych z dużej? 

... naprawdę indeksy mogą być ujemne? Dlaczego i ma typ int?

... wiesz że funkcja nie zadziała przewidywalnie dla tablic "nie-kwadratowych"? Nie lepiej jawnie w definicji wpisać: int mini (int t[N][N]) ?

komentarz 21 listopada 2018 przez adrian17 Ekspert (349,240 p.)

naprawdę indeksy mogą być ujemne? Dlaczego i ma typ int?

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-nonnegative

Nie lepiej jawnie w definicji wpisać: int mini (int t[N][N]) ?

To nic nie robi. Sam sprawdź.

komentarz 21 listopada 2018 przez mokrowski Mędrzec (156,260 p.)
Chyba się pomyliłeś. Jesteś pewien że Twój link dotyczy indeksów tablic?

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es42-keep-use-of-pointers-simple-and-straightforward

1. MISRA, Cert Secure Coding Standard, Autosar warto zerknąć..

Kodowanie liczb ujemnych (zgodnie ze standardem C++), nie ma ustalonej implementacji koniecznie na uzupełnienie do 2. Odsyłam do standardu (jeśli chcesz to znajdę).

https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152051

https://www.autosar.org/fileadmin/user_upload/standards/adaptive/17-03/AUTOSAR_RS_CPP14Guidelines.pdf

W skrócie jedno i drugie (a 3 MISRA) zaleca indeksację zgodną z arytmetyką adresów i jasno ją definiuje.

2. A owszem. Wyjaśnia intencje autora kodu. Przez to lepsze.

Cóż .. pozwól więc że się nie zgodzę...
komentarz 21 listopada 2018 przez adrian17 Ekspert (349,240 p.)
edycja 21 listopada 2018 przez adrian17

Dla pewności, zanim cokolwiek więcej napiszę...

naprawdę indeksy mogą być ujemne? Dlaczego i ma typ int?

Założyłem, że intencją tej wiadomości była podkreślenie różnicy signed/unsigned. Czy takie było zamierzenie, czy może źle zrozumiałem?

komentarz 21 listopada 2018 przez mokrowski Mędrzec (156,260 p.)
Intencją było przekazanie że indeks tablicy to tak naprawdę zakamuflowany argument do obliczenia przesunięcia od jej początku (lub początku przestrzeni wiersza/kolumny/warstwy). Reszta z odpowiedzią na pytanie "dlaczego i jak", znajduje się w standardach. Włącznie z sugestią umieszczania N przy wymiarach ilości wierszy.
komentarz 21 listopada 2018 przez adrian17 Ekspert (349,240 p.)

...dobra, przestań. Z takiego pytania

... naprawdę indeksy mogą być ujemne? Dlaczego i ma typ int?

Nie, nikt nie wyciągnie przesłania

Intencją było przekazanie że indeks tablicy to tak naprawdę zakamuflowany argument do obliczenia przesunięcia od jej początku (lub początku przestrzeni wiersza/kolumny/warstwy). Reszta z odpowiedzią na pytanie "dlaczego i jak", znajduje się w standardach.

Nikt nie ma pojęcia o co Ci chodzi, w tym ja, przez co w zasadzie nie wiem o co dokładnie teraz dyskutujesz.

Jeśli chodziło Ci o docelowe przesłanie "użyj unsigned lub size_t", co było moim założeniem, to po prostu to napisz. Jeśli nie, to.. nie wiem.

komentarz 21 listopada 2018 przez mokrowski Mędrzec (156,260 p.)
Spoko... dostałeś źródła gdzie możesz się dowiedzieć...
komentarz 21 listopada 2018 przez adrian17 Ekspert (349,240 p.)

Ja wiem. Ale nie wiem do czego sam zmierzasz. Mam wrażenie że mówisz podejrzane rzeczy, ale sam nie wiem o co dokładnie Ci chodzi, więc nie mam jak tego skontrować.

Anyway, w takim razie będę celował na ślepo.

Chyba się pomyliłeś. Jesteś pewien że Twój link dotyczy indeksów tablic?

Skomentowałem użycie typu `int` do iterowania po tablicy, z którym nie ma żadnego problemu.

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es42-keep-use-of-pointers-simple-and-straightforward

Nie ma skomplikowanej arytmetyki na wskaźnikach, jest fajnie.

https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152051

Z tego co widzę, kod spełnia zasady. Masz któryś konkretny na myśli?

Kodowanie liczb ujemnych (zgodnie ze standardem C++), nie ma ustalonej implementacji koniecznie na uzupełnienie do 2.

To... nie ma nic do rzeczy.

(BTW, out of topic, w C++20 będzie zdefiniowany na dopełnienie do 2)

komentarz 21 listopada 2018 przez mokrowski Mędrzec (156,260 p.)
Jeśli nie widzisz w źródłach tych wykładni reguł o których wspomniałem, to poprzestańmy na stwierdzeniu że mam niecodzienną wadę wzroku i ja widzę. Osobiście mi to wystarcza a moją intencją nie jest "przekonywanie" a poinformowanie. Możesz tego nie przyjąć do wiadomości i twierdzić inaczej (BTW, zerknij na tag w pytaniu... C czy C++?) Ze źródłami jednak się zapoznaj.
komentarz 21 listopada 2018 przez adrian17 Ekspert (349,240 p.)

tych wykładni reguł o których wspomniałem

Nie widzę reguły, którą by kod autora łamał. Nie rozumiem, skąd (mam takie wrażenie) agresja i czemu nie chcesz bezpośrednio podać konkretnych cytatów.

BTW, zerknij na tag w pytaniu... C czy C++?)

Dlatego "out of topic". Co do C, jest zresztą analogicznie: https://twitter.com/jfbastien/status/989242576598327296?lang=en

Podobne pytania

0 głosów
1 odpowiedź 2,792 wizyt
pytanie zadane 15 października 2017 w C i C++ przez StudzeKisiel Nowicjusz (150 p.)
0 głosów
1 odpowiedź 318 wizyt
pytanie zadane 1 grudnia 2018 w C i C++ przez jankowa1ski Gaduła (3,560 p.)
0 głosów
2 odpowiedzi 169 wizyt
pytanie zadane 17 października 2015 w C i C++ przez 0xf Dyskutant (8,180 p.)

92,977 zapytań

141,940 odpowiedzi

321,182 komentarzy

62,303 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...