Macierz w pascalu

Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Macierz w pascalu

Post autor: Natasha »

Znalazłam program, który oblicza iloczyn liczb na i nad przekątną macierzy 3x3 oraz wyszukuje element największy. Mam parę pytań co do samego zapisu:
1. to array jest potrzebne do zapisywania liczb w jakiejś macierzy, czy można go używać jeszcze w innych przypadkach?
2. po co ta zmienna t?
3. Co to jest '-1e12'?
4 I dlaczego sum := 0.0, czyli dlaczego trzeba wyzerować sumę przed obliczeniem?
5. Co oznacza taki zapis: sum := sum+t[i,j]? liczymy sumę sumy i czegoś jeszcze? :P
Koniecznie muszę wiedzieć, o co w tym wszystkim biega, żeby się potem nie zbłaznić na infie. Proszę o pomoc.

Kod: Zaznacz cały

program macierz3na3;
{ program demonstruje elementarne obliczenia macierzowe }
var
t:array[1..3, 1..3] of real; { macierz 3x3 }
max, sum : real; { tymczasowe maksimum i suma elementów }
i, j : integer; { liczniki wierszy i kolumn }

begin
{ wczytanie zawartości macierzy }
for i := 1 to 3 do
for j := 1 to 3 do
begin
write('Podaj element macierzy x[',i,',',j,']: ');
readln(t[i,j]);
end;
{ wyszukanie maksymalnego elementu }
max := -1e12; { pamiętaj o inicjalizacji maksimum }
for i := 1 to 3 do
for j := 1 to 3 do
if t[i,j] > max then max := t[i,j];
{ obliczenie sumy elementów na i nad przekątną }
sum := 0.0; { pamiętaj o wyzerowaniu sumy przed obliczaniem }
for i := 1 to 3 do
for j := i to 3 do
sum := sum+t[i,j];
writeln('Najwiekszy element: ', max:0:0);
writeln('Suma elementow na i nad przekatna: ', sum:0:2);
readln;
end.
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Macierz w pascalu

Post autor: Sokół »

1. Array to pewna struktura, po polsku po prostu - tablica. Tablica to taka jakby macierz n-wymiarowa, w której można przechowywać liczby, słowa i inne obiekty. W Twoim wypadku tworzysz strukturę dwuwymiarową. W tablicy możesz
przechowywać właściwie wszystko co chcesz, w jednowymiarowej listę liczb, która np. ma być przekazana jako argumenty, listę osób, w tablicy dwuwymiarowej możesz np. rozkład jazdy, gdzie wiersze to będą miasta, a kolumny to godziny, ... przykłady można mnożyć.
2. t nie jest zmienną, t to jest tablica.

Kod: Zaznacz cały

t:array[1..3, 1..3] of real; 
Powoduje, że tworzysz tablicę (array) o nazwie t, o wymiarach 3x3. Array jest strukturą, formą, t oznacza konkretną tablicę, z nadaną nazwą (t), której używasz w programie.
3. -1e12 to jest liczba w notacji naukowej.
4. Zmienna po stworzeniu zawiera wartości w uproszczeniu losowe, wartości które były w tym miejscu pamięci co zmienna, przed stworzeniem zmiennej.
5. Oznacza to, że do obecnej wartości sumy dodajesz wartość która znajduje się w danej komórce tablicy, oznaczonej przez t[i,j].
Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Macierz w pascalu

Post autor: Natasha »

-1e12 - czy tego nie da się zapisać jakos inaczej? Bo na pewno mnie zapytają, skąd to się wzieło i dlaczego tak, a ja nie mam zielonego pojęcia/
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Macierz w pascalu

Post autor: Sokół »

Możesz to zapisać inaczej, jak zwykłą liczbę, poszukaj co to jest notacja naukowa. W podanym przykładzie napisali bardzo małą liczbę, tak by prawdopodobieństwo znalezienia w macierzy zbiegało do 1. Jednak taki zapis nie jest pełni matematycznie poprawny, jeśli wszystkie elementy tablicy będą mniejsze od -1e12, to maksimum nie zostanie znalezione poprawnie. Bezpiecznej inicjować maksimum wartością pierwszego elementu tablicy.
Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Macierz w pascalu

Post autor: Natasha »

Zmieniłam max=1, ale na moj rozum teraz wszystkie elementy będą wieksze od zera wiec wszystkie powinny być tym maxem, ale dobra, zostawie to juz :P

Kod: Zaznacz cały

sum := 0; { pamiętaj o wyzerowaniu sumy przed obliczaniem }
for i := 1 to 3 do
for j := i to 3 do
sum := sum+t[i,j];
writeln('Najwiekszy element: ', max:0:0);
writeln('Suma elementow na i nad przekatna: ', sum:0:1);
readln;
end.
Dlaczego zamiast 1 w 3 linijce jest i? Wstawialam 1 z ciekawości i też chodzi. :P
Czy moglby mi ktoś przetestować ten program, żebym wiedziala, jak w rzeczywsitosci liczona jest ta suma, bo nie widzę tego dodawania...
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Macierz w pascalu

Post autor: Sokół »

1. max=1 jest tym bardziej źle, oznacza, że maksimum ma wartość 1, a nie wartość pierwszego elementu w tablicy.

2. Dlatego, że masz liczyć sumę elementów nad przekątną, a nie wszystkich elementów.

3.
a przede wszystkim:
Awatar użytkownika
Natasha
Użytkownik
Użytkownik
Posty: 986
Rejestracja: 9 lis 2008, o 15:08
Płeć: Kobieta
Podziękował: 97 razy
Pomógł: 167 razy

Macierz w pascalu

Post autor: Natasha »

No to co mam dać za max, żeby nie było tej dziwnej liczby?
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Macierz w pascalu

Post autor: Sokół »

max:=t[1,1]
ODPOWIEDZ