Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

Tablice jednowymiarowe

Tablice to struktury, które pozwalają nam gromadzić większą ilość danych w uporządkowanej formie. Jeśli potrzebujemy przechować 100 imion, czy liczb zamiast deklarować 100 zmiennych możemy do tego użyć tablicy. W Javie istnieją zarówno tablice jedno jak i wielowymiarowe. Schematyczna deklaracja jednowymiarowej tablicy wygląda następująco:

typ[] nazwa_tablicy = new typ[liczba_elementów];

poprawny jest także zapis:

typ nazwa_tablicy[] = new typ[liczba_elementów];

Przez ten zapis możemy rozumieć zadeklaruj i utwórz pustą tablicę elementów typu "typ" o liczbie elementów równej "liczba_elementów". Oczywiście typem mogą być zarówno liczby, znaki, ciągi znaków, lub obiekty.

Istnieje również inny sposób utworzenia tablicy, jeśli od razu znamy elementy:

typ[] tablica = {wartosc1, wartosc2, wartosc3, ...};

W ten sposób tworzymy gotową tablicę od razu zawierającą jakieś wartości, a jej rozmiar jest równy ilości elementów.

Tablice są strukturą, której wielkość jest stała. Nie da się jej zwiększać, ani zmniejszać, można jedynie edytować poszczególne komórki, lub je wyzerować. Do elementów można się odwoływać poprzez podanie indexu w tablicy, co wygląda o tak:

int jakas_zmienna = nazwa_tablicy[numer_indexu];
//przykład:
int liczba = tab[3];

W powyższym przykładzie do zmiennej "int liczba" przypisaliśmy czwarty element tablicy o nazwie tab. Trzeba pamiętać, że komórki są numerowane od zera. Oczywiście typ tablicy oraz typ zmiennej muszą się zgadzać, chyba, że użyjemy konwersji, bądź rzutowania.

Poniżej zobaczmy praktyczny przykład ukazujący wypełnienie tablicy kolejnymi liczbami całkowitymi od 1 do 10 i przypisanie jakiejś zmiennej wartości z komórki.

public class Tablice {
	public static void main(String[] args) {
		int[] tablica = new int[10];

		for (int i = 0; i < 10; i++)
			tablica[i] = i + 1;

		int zmienna = tablica[3];

		for (int i = 0; i < 10; i++)
			System.out.println("Kolejna komórka to: " + tablica[i]);
	}
}

Najpierw zadeklarowaliśmy i utworzyliśmy tablicę liczb typu int o rozmiarze 10. Następnie w pętli for wypełniamy ją liczbami od 1 do 10. Jak widzimy wygodnie robi się to właśnie w taki sposób, ponieważ możemy użyć zmiennej z warunku pętli do numerowania komórek a także przypisywania odpowiednich wartości. Ponieważ tablice w języku Java numerowane są od 0 to musimy do kolejnych wartości dodać 1. Gdy mamy już gotową tablicę to możemy wykorzystać ją do przypisania jednej z wartości ( u nas 4) a następnie wyświetlenie jej zawartości.

Dodatkowo ważną rzeczą o której trzeba na razie chociaż wspomnieć to wyjątek zgłaszany przez tablice. W przypadku, gdy przekroczymy zakres, czyli na przykład spróbujemy wykonać poniższy kod:

public class Tablice{
  public static void main(String[] args){
	  int[] tablica = new int[10];
	  tablica[10] = 123;
  }
}

wygenerowany zostanie wyjątek ArrayIndexOutOfBoundsException, ponieważ próbujemy przypisać do komórki tablicy o indeksie 10 (numerowanie od 0, więc 10 elementowa tablica ma maksymalnie index 9). Brzmi strasznie, ale na szczęście takie nie jest. Spróbuj wykonać powyższy kod i zobacz co się stanie. Jeśli zobaczysz takie zachowanie w innych swoich programach to będziesz wiedział, że użyłeś niepoprawnego indeksu tablicy.

Na późniejszych lekcjach dowiemy się o dynamicznych strukturach danych takich jak listy. Ich zaletą jest to, że same dopasowują swój rozmiar do liczby elementów, jednak nie zawsze są tak wydajne jak proste tablice przedstawione powyżej.

Zadania do samodzielnego wykonania:

1.12 Napisz program, w którym zadeklarujesz i utworzysz pięcioelementową tablicę odpowiedniego typu. W pętli pobierzesz od użytkownika 5 imion i je w niej zapiszesz. Następnie wyświetl na ekranie powiadomienia "Witaj imie_z_tablicy" dla każdego z podanych parametrów.

Rozwiązanie

1.13 Utwórz tablicę typu int przechowującą n elementów - gdzie n jest parametrem pobieranym od użytkownika. Następnie wypełnij ją liczbami od 1 do n i wyświetl zawartość na ekranie przy pomocy pętli while.

Rozwiązanie

<- Poprzednia LekcjaNastępna Lekcja ->

Komentarze

Grzesiu

Czegoś tu nie rozumiem;

for(int i=0; i<10; i++)
tablica[i] = i+1;

int zmienna = tablica[3];

for(int i=0; i<10; i++)
System.out.println("Kolejna komórka to: "+tablica[i]);
}
}

Dlaczego pętla for nie ma klamer w których się zaczyna i kończy? To wygląda tak jakby w pierwszej funkcji for jedną z rzeczy które pętla wykonuje dla danego "i' było wykonanie 10 opecacji drugie pętli. Czy może kiedy for nie jest ograniczone klamrami liczy się tylko linia nastepująca po niej?

Slawek

http://javastart.pl/podstawy-jezyka/petle/
"Podobnie jak przy instrukcji warunkowej if można pominąć nawiasy klamrowe w wypadku, gdy w ciele pętli znajduje się tylko jedna metoda, lub dowolna instrukcja"

Agnieszka

Czy kogokolwiek maszyna wirtualna jest na tyle zdolna ze w wyniku podanego kody wyświetla elementy od 1 do 10 a nie od 0 do 9 ? ja mam taka sytuacje....

Greg

Zapewne już sobie poradziłas, ale poniższy kod ładnie tą zależność "pokazuje":


public class Tablice {
public static void main(String[] args) {
int[] tablica = new int[10];

for (int i = 0; i < 10; i++)
tablica[i] = i + 1;

int zmienna = tablica[3];

for (int i = 0; i < 10; i++)
System.out.println("Element tablicy w pozycji "+i+" to: " + tablica[i]);
System.out.println(" ");
System.out.println("------TABLICA-------");
for (int i = 0; i < 10; i++)
System.out.print(tablica[i]+" ");
System.out.println("\n------pozycja-------");
for (int i = 0; i < 10; i++)
System.out.print(i+" ");
System.out.println("\n--------------------");
}
}

Witek

Witam
Może ktoś mi wytłumaczyć dlaczego jak wpisuję wartość min = 1 to w wyniku na konsoli wyświetlane jest 0, a jak wpisuję wartość min = -1 to jest ok., czy to może mieć związek z zainicjowaniem zmiennych w_min i w_maks warością = 0, jeżeli nie to gdzie może być błąd. Poza tym program działa poprawnie. Z góry dziękuję za pomoc.
Kod programu:

wykasowane

Slawek

umieszczaj kod w znacznikach <pre> </pre> wtedy pozostanie taki jak trzeba.
Ot takie zabezpieczenie, które czasami przeszkadza.
/edit: a jednak niezarejestrowanym użytkownikom nic nie pomoże. Muszę coś z tym pomyśleć ...

Witek

Dzięki za informacje o znacznikach, nie wiedziałem, że trzeba tu umieszczać kod znacznikach. Wspomniałeś o rejestrowaniu użytkowników, szukałem, aby się zarejestrować, niestety nie znalazłem(może gdzieś pominąłem) tylko okienko do komentarzy, ale ja nie dostaje info. na pocztę o odp. na komentarz/e.
Ps. Znalazłem przyczynę błędu, teraz już jest ok., dzięki.
Pozdrawiam Witek

Valdy

Tak też da radę:

public class Tablice{

public static void main(String[] args) {

int[] tab = new int[10];
for(int i=0; i<10; i++){

tab[i] = i + 1;
System.out.println("Kolejna komórka to: "+tab[i]);
}
}
}

Witek

Jężeli w pętli for wpiszesz tab[i] = i, bez plus 1, to wynik będzie wyświetlany od 0 do 9.

andrzej

do rozwiazania drugiego zadania sugerujesz uzycie .lenght, ktora to wlasnosc opisujesz dopiero przy tablicach wielowymiarowych. czy bez lenght mozna spokojnie zrobic to samo na tyle przejrzyscie zeby w oczy nie klulo?:) btw bardzo ciekawy kursik, coraz mniej czuje sie baranem w temacie javy.

Marcin

Zawsze mnie to zastanawiało czy "i" może być każdą inna literą?

mrJaros

Napisałeś
"Ponieważ tablice w języku Java numerowane są od 0 to musimy do kolejnych wartości dodać 1."

Otóż nie musimy, tylko chcemy :) Bo chcemy mieć w tablicy liczby 1,2,3,...,10. Ale możemy chcieć liczby 0,...,9 albo cokolwiek innego, np 2^i :-)

Katarzyna

Tablice typu int - ok, ale czy moglby ktos napisac, jak utworzyc tablice typu string, gdzie ilosc elementow tablicy ma zostac podana przez uzytkownika? Cos mieszam z indeksem, bo za kazdym razem wyskakuje mi blad ArrayIndexOutOfBoundsException...

Slawek

2 komentarze wyżej.

andrew

Witam.
Mam problem z pobraniem wielkości tablicy, a raczej z pierwszą pętlą. Jeśli pobiore wielkość w ten sposób:

Scanner in=new Scanner(System.in);
int a=in.nextInt();
String[] tabNazwisko=new String[a];

for (int i=0;i<tabNazwisko.length;i++)
{
System.out.println("podaj nazwisko "+(i+1)+" pracownika :");
tabNazwisko[i]=in.nextLine();
}

to pętla przeskakuje raz automatycznie.
Jeślie przed pętlą stworze nowy obiekt "odczyt"

Scanner odczyt=new Scanner(System.in);

i go wykorzystam w pętli

for (int i=0;i<tabNazwisko.length;i++)
{
System.out.println("podaj nazwisko "+(i+1)+" pracownika :");
tabNazwisko[i]=odczyt.nextLine();
}

to jest wszystko wporządku.
Jak "zerować" obiekt "in", aby cały program działał na nim?

Kefas

Witam! Co trzeba zrobić w kodzie aby imiona zapisywały się do pliku wszystkie. W tej chwili nadpisują się w pętli i zapisuje się tylko ostatnie imię. Albo inaczej, jak zapisać całą zawartość tablicy do pliku, bez użycia pętli?


import java.util.*;
import java.io.*;

public class Imiona {

/**
* @param args
*/
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
String tablica[] = new String[5];
Scanner odczyt = new Scanner(System.in);

for(int i=0; i<5; i++){
System.out.println("Podaj imię: ");
String imie = odczyt.nextLine();
tablica[i]= imie;

PrintWriter zapis = new PrintWriter("imiona.txt");
zapis.println(imie);
zapis.close();
}
for(int i=0; i < 5; i++)

System.out.println("Imię które podałeś to: "+tablica[i]);


}

}

Witek

Witam
Skorzystaj z tego fragmentu kodu u mnie działa
Mam nadzieję, że Ci pomoże

for(int i=0; i<3; i++){
imiona = odczyt.nextLine();
tab[i] = imiona;//odczyt.nextLine();
}

zapis = new PrintWriter("Imona.txt");

for(String x: tab)
zapis.println(x);
zapis.close();

System.out.println("Podane imiona to:");

Kefas

Dzięki, pomogło :)

Katarzyna

Niby tak, przejrzalam te komentarze i zastosowalam co potrzebne w moim programie, ale nadal wyskakuje ten blad. Czy ktos moglby zerknac i powiedziec, w ktorym miejscu zle napisalam kod?


import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class komis3{
public static void main(String[] args) throws

FileNotFoundException{

Scanner in = new Scanner(System.in);
System.out.println("Program: KOMIS SAMOCHODOWY");

System.out.println("Podaj ilosc samochodow, ktora chcesz

wprowadzic:");
int a = in.nextInt();

String[] tablica = new String[a];


Scanner odczyt = new Scanner(System.in);


for(int i=0; i0){
System.out.println(tablica[licznik]+" ");
licznik--;
}


PrintWriter zapis1 = new PrintWriter("komis.txt");
for (String x: tablica)
zapis1.println(x);

zapis1.close();

System.out.println("Wpis dodany");

}
}

Slawek

Napisz po prostu jaki błąd dostajesz, tak to raczej ciężko pomóc.

Witek

Witam
Poniżej masz poprawiony kod programu u mnie dział. Mam nadzieję, że oto Ci chodziło.
Pozdrawiam

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class Komis_Auta {

/**
* Napisz program, który pobierze od użytkownika dowolną ilość marek aut, zapisze je
* do tablicy, a następnie do pliku "Komis Auta.txt"
* Wyniki przedstawi na konsoli
*
* @author Wiciu
*/
public static void main(String[] args) throws FileNotFoundException {

Scanner odczyt;
String markaAuta;
PrintWriter zapis;
File plik;
int iloscAut;
String tab[];

System.out.println("Podaj ilosc marek samochodów do wprowadzenia:");

odczyt = new Scanner(System.in);
iloscAut = odczyt.nextInt();

tab = new String[iloscAut];

System.out.println("Wpisz " + iloscAut + " marki pojazdów");

for(int i = 0; i < iloscAut; i++){
odczyt = new Scanner(System.in);
markaAuta = odczyt.nextLine();
tab[i] = markaAuta;
}
System.out.println();

System.out.println("Podane auta do zapisu to:");

for(String x: tab)

System.out.println(x);
System.out.println();

zapis = new PrintWriter("Komis Auta.txt");
for(String x: tab)
zapis.println(x);
zapis.close();

System.out.println("Odczytane nazwy aut z pliku to:");

plik = new File("Komis Auta.txt");

odczyt = new Scanner(plik);

while(odczyt.hasNextLine()){
markaAuta = odczyt.nextLine();
System.out.println(markaAuta);
}
System.out.println("Koniec programu");
}
}


andrew

Witam.
Jak z tablicy
int tab[] = {1,2,3,4,5};

wyswietlić losową liczbę ?
Wiem, że poniższy kod jest zły, ale chyba jestem blisko ?

Random r=new Random();
System.out.println(r.tab[i]);

Ktoś podpowie jak urzyć klasy Random ?

Pozdrawiam

Slawek

Gdzie masz w swoim wycinku kodu zmienną i, że jej używasz? Trochę logicznego myślenia :)


int[] tab = {1, 2, 3, 4, 5};
System.out.println(tab[new Random().nextInt(tab.length)]);

Omawiając:
Wyświetl wartość tablicy z losowego indeksu losowanego z indeksów od 0 do długość_tablicy-1
ON

I po kiego grzyba te tablice??
To jest najbardziej niezrozumiała część Twojego kursu.

Slawek

Na przykład po to, żeby nie deklarować 500 zmiennych i żeby można było w łatwy sposób wypełniać je, lub odczytywać dane w pętlach.

ON

Aaaaa
OK Już rozumiem :)

Daniel

Jeżeli ktoś z czytających ten kurs nie rozumie zastosowania/działania struktur typu tablica czy rekord (bądź struktura, jak zwał tak zwał) polecam wcześniej się zapoznać z kursem PASCALA (bo takich w sieci jest najwiecej). Idea jest ta sama, jak w każdym języku programowania. PASCAL został stworzony do celów dydaktycznych, ale jeśli ogarniesz na przykładzie PASCALA to i dasz rade w innych językach bo sens i działanie instrukcji elementarnych jest niemal taki sam. Ja osobiście nie lubię PAsCALA ale jest zrozumiały jeśli troszeczkę umiesz angielski, i dodatkowo jest zrozumiały dla "programisty". Jeżeli już się nauczysz jak korzystać z tego co Ci język oferuje będzie Ci naprawdę dużo łatwiej się nauczyć innych języków wysokiego poziomu na poziomie elementarnym. A jeśli zaczynasz swoją naukę od tego kursu, jest ok! Tylko będzie Ci łatwiej jeśli zapoznasz się wcześniej z podstawami języka ANSI C bo od niego wiekszość języków się wywodzi. Ale ten kurs jak najbardziej polecam:)

Jerzy Sobczyk

Mam pytanie. Czy język Java traktuje tablice jako zmienne i czy tablicę może zwracać metoda klasy instrukcją return?
Pozdrawiam Jurek S.

Marcin Kunert

Pewnie, że można. Tutaj masz przykład:

public int[] zwrocTablice() {

int[] wynik = new int[5];
wynik[0] = 5;

return wynik;
}

Karol2

Jak zainicjalizować klasy z których składa się tablica? Nie mogę wybrać którego konstruktora klasy wybrać przy tworzeniu tablicy.

Witek

Witam
Nie bardzo rozumie twojego pytania. Jeśli chodzi Ci o tworzenie tablic to możesz zrobić np.:

Tablica typu np.:
int [] tablica = new int[5]; // tablica typu int 5 –cio elementowa
lub
int[] tablica = {99,10,18,25,45};

Janusz

Dlaczego pętlą foreach nie można zapisywać w tablicy?

Kod

int[] tablica = new int[5];
for(int e : tablica)
e = 7;

nie działa

Sławek Ludwiczak

Bo wartość 7 przypisujesz w tym przypadku do zmiennej e. W pętli for each elementy przypisuje/odczytuje się do kopii obiektów/elementów w tablicy, a nie do ich faktycznych instancji/wartości. Dobry przypadek do JavaTraps :)

Janusz

Czyli pętla for-each pozwala tylko na odczyt elementów tablicy (funkcja, a raczej METODA operuje na argumentach przekazanych przez kopię, a nie wskaźnik do argumentu - jak w klasycznym C), natomiast do zapisu w tablicy muszę użyć tradycyjnej pętli?

deklaracja tablicy:
int[] tablica = new int[10];

do zapisu tylko jeden sposób ??? (wypełnianie tablicy siódemkami):
for(int i=0; i<tablica.length; i++)
tablica[i]=7;

Odczyt tablicy możliwy jest już na dwa sposoby: (???????)
for(int i=0; i<tablica.length; i++)
System.out.printf("%3d", tablica[i]);

oraz

for(int e : tablica)
System.out.printf("%3d", e);

[Do zgłębiania Bruca Eckela jeszcze nie doszedłem]

Spiral

tablica[i] = i + 1;

Nie rozumiem tego, co ten fragment właściwie robi?

Spiral

Mam też problem z tym fragmentem:
int zmienna = tablica[3];

for (int i = 0; i < 10; i++)
System.out.println("Kolejna komórka to: " + tablica[i]);

Nie rozumiem, o co chodzi z tą pętlą, i dlaczego tablica[i], jeżeli wcześniej jest tablica[3].

Kaczmar



Spiral:

tablica[i] = i + 1;
Nie rozumiem tego, co ten fragment właściwie robi?

To proste, w javie tablice sie numeruje od zera a nie od jedynki- pierwsza tablica ma przypisany numer 0. My natomiast chcemy wypelnic te tablice numerami od 1 do 10 stad i+1. Gdybysmy nie napisali i+1 tylko samo i to by nam wypelnilo numerami od 0 do 9.
Sławek Ludwiczak

Tylko bym poprawił, że nie "pierwsza tablica" tylko "pierwszy element tablicy".

@Spiral
int zmienna = tablica[3];
Oznacza tyle, że do "zmiennej" przypisujemy wartość 4 elementu tablicy - tak jak pisał Kaczmar, numerujemy elementy od zera. Nie ma to wpływu na nic co jest wewnątrz tablicy.
Co do pętli i jest tutaj takim licznikiem, który na początku ma wartość 0, później 1, 2, 3, 4....9 (dopóki spełniony jest warunek izapisując tablica[i] oznacza to, że odwołujemy się do i'tego elementu w tej tablicy, czyli do elementu o indeksie 0, 1, 2, 3, 4...9 (numerowanie od 0)

Anonim

przeczytałem 4 razy ale wkońcu rozumiem

Maro

wcale się nie pokazująte komentarze xD żałosna strona

Kaczmar



Maro:

wcale się nie pokazująte komentarze xD żałosna strona

no w komentarzach chodzi o to zeby sie nie pokazywaly po skompilowaniu nie?! komentarze to sa wiadomosci od tworcy kodu dla osob wykorzystujacych go.
Konrad

Mam pytanko jak napisać prosty program który wyrzuci wyjątek OutOfMemoryError ?
Czy poprostu zadeklarować ogromną Tablicę??????????
int i [] = new int [54342342342389356896348093598035809356];

Grzegorz

W poradniku tym dodałbym jeszcze informację o możliwości tworzenia tablic anonimowych:

new int[] = {x1, x2, ...}; //rezerwacja pamięci dla tablicy

Oraz o możliwości wykorzystania tej metody do ponownego inicjowania tablic bez tworzenia nowej zmiennej:

int[] liczby = {1, 2, 3}; //wypełniamy tablicę liczbami 1,2,3
liczby = new int[] {4, 5, 6}; //podmieniamy elementy tablicy na nowe

KUX

Witam,
Czy tablicę są przekazywane do metod na zasadzie obiektu? W sensie, nie leci sama wartosc a wartosc z referencją?

Adam

Po co 2 razy deklaruje się for?
Skoro można otworzyć klamrę po 1 for, usunac drugie for i wynik bedzie ten sam.
Widzę, że to częsta tendencja w przykładach o tablicach czy ma to większe znaczenie?
int[] tablica = new int[10];
int zmienna = tablica[3];
for (int i = 0; i < 10; i++){
tablica[i] = i + 1;
// for (int i = 0; i < 10; i++)
System.out.println("kolejna komorka to " + tablica[i]);
}
}
}

Ignacy

Czy źle napisany program może zepsuć cmd? Wszystko poszło dobrze, skompilowałem i otworzyłem program, ale po raz pierwszy mi się coś takiego pojawiło, mianowicie nic..
Świetny kurs, nawet dla takich, co nic nie wiedzą o programowaniu (jak ja). Pozdrawiam :)

capoeiramen

Siema, a ja mam inne pytanie. Jak mam zadeklarowac zmienne tablicy, ze przy wyjsciu mam string, czyli zapisuje losowe numery na tablicy int, i jak teraz zamienic tablice int na tablice string?



ilosc = odczyt.nextInt();
for(int counter=1;counter<=ilosc;counter++){
losowanie = 1+los.nextInt(liczbyValue);
++wyniki[losowanie];

a dalej juz nie wiem jak zamienic wlasnie tablice "wyniki" :/

Adrian

Dlaczego java ma taki długi zapis w c++ wystarczy int zmienna[100]

Virus of Faith

Bo tak a nie inaczej.

Virus of Faith

btw chyba nie czytałeś wstępu do kursu...

Adrian

Przeczytałem i co?
Coś przeoczyłem?

Virus of Faith

sporo przeoczyłeś. była mowa o tym dlaczego w c++ zapis jest krótki, a dlaczego w javie długi. z resztą przemyśl ponownie to co napisałeś - po co wchodzisz na stronę takiego kursu: żeby mówić że w c++ napiszesz to krócej?

krisol

Witam!
Mam pytanie: jak usunąć wszystkie powtórzenia elementu "x" z tablicy?
Z góry dziękuję za odpowiedź :)

Robert

public class Tablice {

public static void main(String[] args) {

int[] tablica = new int[10];

for (int i = 0; i < 10; i++)
tablica[i] = i + 1;

int zmienna = tablica[3];

for (int i = 0; i < 10; i++)
System.out.println("Kolejna komórka to: " + tablica[i]);

}

}


int zmienna = tablica[3]; --- CO TO ZNACZY? A DOKŁADNIEJ [3]???

Janosch

int zmienna = tablica[3] - to znaczy, "weź wartość z komórki 3 z tablicy o nazwie "tablica" i przepisz ją do zmiennej o nazwie "zmienna" typu int. [3] - to jest tak naprawdę 4 element, bo elementy w tablicy rozpoczynają się od 0. Trzeba o tym pamiętać.

Dominik

int roz = 8;
double x = 0.1000000;
double[] tab = new double[roz];
for(int i=0;i<8;i++){
tab[i] = x;
x = x+0.3;
System.out.println(tab[i]);
}

proste prawda. ale nie wiem czemu wynik mam taki:

0.4
0.7
1.0
1.3
1.6
1.9000000000000001
2.2

nie rozumiem przed ostatniego wyniku jak?!

Dominik

w ten sam sposób przy innych danych mi wyniki wychodzą o jedną albo dwie milionowe mniej albo węcej ale jak?

Tomek

Hej, pytanko:
for (int i = 0; i < 10; i++)
tablica[i] = i + 1;

jak należy tutaj rozumieć ten drugi wers zaczynajacy się od wyrazu tablica? Można łopatologicznie prosić :)

Janosch

Tomku, w tej pętli zapisujesz do tablicy 10 elementowej liczby od 1 do 10, i chcesz żeby pierwszy element tablicy wynosił 1 a ostatni 10, dlatego dodajesz 1. Gdybyś nie dodał to pierwszy element wynosiłby 0, a ostatni 9.

tablica[0] = 0+1 >> =1 czyli dla pierwszego elementu tablicy wstaw 1.
tablica[1] = 1+1 >> =2 czyli dla drugiego elementu tablicy wstaw 2.
...
tablica[9] = 9+1 >> =10 czyli dla dziesiątego elementu tablicy wstaw 10.

Gdyby nie było tego miałbyś tablicę 10 elementową z wartościami od 0 do 9.
tablica[0] = 0;
tablica[1] = 1;
...
tablica[9] = 9;