Wyszukiwanie największej leksykograficznie tablicy

1

Witam, mam do zrobienia jedno zadanie (tak, wiem, zadanie, ale nie proszę o gotowca, potrzebuję pomocy bo już mózg wysiada...).

(Napisać program) Wczytujący kilka tablic liczb rzeczywistych tej samej długości i drukujący największą (leksykograficznie) z nich.

Na wszelki wypadek, żeby nie było wątpliwości, podaję też definicję:

Tablica a[n] poprzedza leksykograficznie tablicę b[n] wtedy i tylko wtedy gdy dla pewnego całkowitego i ∈ [0. . .n-1] zachodzi:

a[0] = b[0]
a[1] = b[1]
. . .
a[i-1] = b[i-1]
a[i] < b[i]

A tutaj to, co do tej pory udało mi się stworzyć (oczywiście C):

#include <stdio.h>
#include <stdlib.h>

main () {
	int i, j, pom=666, ilet, ilek;
	
	printf("Podaj ile będzie tablic: ");
	scanf("%i", &ilet);
	
	printf("\nPodaj ile będzie liczb: ");
	scanf ("%i", &ilek);
	
	double tab[ilet][ilek];
	
	for (i=0; i < ilet; i++) {
		for (j=0; j < ilek; j++) {
			printf("Daj %i liczbę %i-ej tablicy: ", j+1, i+1);
			scanf("%lf", &tab[i][j]);
		}
	}
	//DRUKOWANIE TABLIC (do testów)
	//printf("Podane tablice: \n");
	//for (i=0; i < ilet; i++) {
	//	printf("\nTablica %i: ", i+1);
	//	for (j=0; j < ilek; j++) {
	//		printf("%lf, ", tab[i][j]);
	//	}
	//}
	
	for (i=0; i < ilet; i++) {
		for (j=0; j < ilek-1; j++) {
			if (tab[i][j] > tab[i+1][j]) {
				pom = i;
				// tutaj mi czegoś brakuje...
			}
			//if (pom!=666) {
			//	printf("Największa leksykograficznie jest tablica %i.\n", pom+1);
			//	exit(0);
			//}
		}
		if (pom==666) printf("Wszystkie tablice są równe.\n");
	}
}
 

Dla ułatwienia czytania kodu:

  • ilet - ile tablic
  • ilek - ile liczb w tablicach.

Ogólnie problem się pojawia w momencie, kiedy muszę porównać j-te komórki każdej z tablic. Pierwszy raz piszę program na dwuwymiarowej tablicy (początkujący jestem, no...) i mam niezły mętlik w głowie przy tym programie. W kodzie od momentu gdzie jest komentarz "tutaj mi czegoś brakuje" jest tak naprawdę nic, bo tak zacząłem kombinować, że się w tym pogubiłem...

Proszę o pomoc, ponieważ nawet nie wiem jak mam o to google zapytać

Przy okazji - chciałbym się przywitać, świeżak na forum jestem ;) Mam nadzieję, że kiedyś to ja będę pomagał, a nie tej pomocy potrzebował :)

1
int p=0,v=0;
        for (i=1; i < ilet; p=(v>0?i:p), ++i) for (j=v=0; (j < ilek)&&(!v) ; ++j)  v = ( tab[p][j] < tab[i][j] ) - ( tab[p][j] > tab[i][j] );
//p - maksymalny wiersz
0

Nie porównuj tablic i-tej z i+1-szą. Nie o to chodzi. Zrób tak jak przy wyszukiwaniu największej liczby w tablicy. Zapamiętaj sobie indeks największej (leksykograficznie) tablicy. Na początku możesz przyjąć, że jest to pierwsza tablica czyli ta o indeksie 0. Sprawdzanie zacznij od drugiej tablicy czyli od indeksu 1. No i teraz w pętli jeśli trafisz na tablicę większą (od tej zapamiętanej) wtedy podmień zapamiętany indeks.

1 użytkowników online, w tym zalogowanych: 0, gości: 1