Sito Eratostenesa w C++ przesiew liczb do i większych

Wielkość: px
Rozpocząć pokaz od strony:

Download "Sito Eratostenesa w C++ przesiew liczb do 10 16 i większych"

Transkrypt

1 Sito Eratostenesa w C++ przesiew liczb do i większych Ogólnie o sicie Eratostenesa Algorytm, opracowany przez Eratostenesa, służy do wyszukiwania liczb pierwszych (liczb mających dokładnie dwa dzielniki). Najbardziej naturalna metoda określania, czy liczba jest pierwsza, polega na sprawdzeniu jej podzielności przez wszystkie liczby naturalne mniejsze od niej. Eratostenes zauważył, że można ograniczyć ilość dzielników. Doszedł on do wniosku, że mając daną liczbę naturalną N, w celu wyznaczenia wszystkich liczby pierwszych mniejszych od N, należy znaleźć największą liczbę pierwszą która spełni warunek p 2 <=N (gdzie p liczba pierwsza), a wszystkie większe od niej sprawdzić pod względem podzielności przez liczby pierwsze mniejsze lub równe p. Przykładowo dla N=100: p=7 (bo 7 2 =49, a 11 2 =121) Liczby pierwsze mniejsze od p: p 1 =2 p 2 =3 p 3 =5 Sprawdzamy liczby od 8 do 100. Jeśli dzielenie daje resztę inną niż 0, dla każdej z powyższych liczb pierwszych, użytych w postaci dzielników, liczba jest pierwsza. Dodatkowo ze zbioru otrzymanych liczb należy odrzucić 1, która ma tylko jeden dzielnik. Łatwo zauważyć, że największa z liczb pierwszych, uzyskanych w wyniku tych działań, spełnia warunek p najwyższa 2 <=N 2. Oznacza to, że dysponując wynikami wcześniejszych obliczeń, możemy znaleźć nieskończenie wiele liczb pierwszych. Adaptacja algorytmu do kodu źródłowego Zapiszmy powyższy przykład w postaci kodu źródłowego w języku C. Kod prezentuje jedno z najprostszych możliwych rozwiązań ŹRÓDŁO #include<stdio.h>//dodajemy bibliotekę we-wy 2. main() 3. { 4. int liczp[99];//tablica dla odnajdywanych liczb pierwszych 5. int illiczb,nilliczb;//zmienne zliczające ilość liczb na tablicy liczp[] 6. int liczba;//zmienna przechowująca sprawdzaną liczbę 7. liczp[1]=2;//wpisujemy na początkowe pozycje tablicy liczby pierwsze 8. liczp[2]=3;//dla N= liczp[3]=5; 10. liczp[4]=7; 11. illiczb=4;//wpisujemy do zmiennej aktualną ilość liczb na taśmie 12. nilliczb=illiczb; 13. for(liczba=8; liczba<=100; liczba++){ 14. if((liczba%liczp[1]!=0) && (liczba%liczp[2]!=0) && (liczba%liczp[3]!=0) && (liczba%liczp[4]!=0)){ 15. nilliczb++; 16. liczp[nilliczb]=liczba;//jeśli sprawdzana liczba nie jest podzielna //przez wprowadzone początkowo na tablicę 1

2 17. } 18. } //liczby pierwsze to zapisujemy ja na tablicy //i zwiększamy zmienną nilliczb; zmienna //illiczb (liczba dzielników) nie zmienia się 19. for(int i=1; i<=nilliczb; i++){ 20. printf("%i) %i\n",i,liczp[i]);//po skończeniu przesiewu wyświetlamy //zawartość tablicy 21. } 22. getchar(); 23. } Liczby pierwsze zapisywane są na tablicy liczp. W liniach 7-12 wpisujemy na wspomnianą tablicę liczby spełniające warunek p 2 <=N (dla N=100) oraz określamy ilość liczb zgromadzonych na tablicy przy pomocy zmiennej illiczb, a także przypisujemy tą wartość zmiennej nilliczb, która będzie zliczała ilość liczb pierwszych w czasie ich odnajdywania. Linia 14 odpowiada za sprawdzanie liczby pod względem podzielności przez, umieszczone w liniach 7-12, liczby na tablicy. Zakres sprawdzanych liczb określamy pętlą for w linii 13. Na koniec (linie 19-21) wypisujemy zgromadzone na tablicy liczby. Optymalizacja kodu wstęp do przeszukiwania kolejnych zakresów Zmodyfikujmy powyższy kod tak, aby mógł służyć do sprawdzania liczb większych od 100 na podstawie wyników wcześniejszych zakresów. Zacznijmy od linii 14. Dla N=100 mamy tylko cztery dzielniki, więc możemy pozwolić sobie na wypisanie każdego warunku oddzielnie. Ilość dzielników wzrasta jednak po sprawdzeniu każdego kolejnego zakresu. Musimy więc zmodyfikować ten fragment. Dzięki zmiennym illiczb i nilliczb wiemy ile jest liczb na tablicy. Możemy zastosować pętle for dla dzielenia przez kolejne liczby pierwsze. Spowoduje to jednak, że wykonywane będzie dzielenie zawsze tyle razy ile liczb mamy na tablicy, pomimo tego, że sprawdzana liczba okaże się podzielna przez którąś z nich. Jeśli dzielenie przez 3 lub 5 da resztę 0 to dalsze dzielenie nie jest uzasadnione. Zastosujmy więc pętle while. Dodajmy zmienną flaga która będzie regulowała działanie pętli. Określmy, że pętla będzie wykonywana gdy flaga!=0. Wartość 0 należy w tej sytuacji przypisać zmiennej flaga, gdy: - w wyniku dzielenia otrzymamy resztę 0; - wykonamy dzielenie tyle razy, ile liczb mieliśmy na tablicy przed rozpoczęciem przesiewu; Aby umożliwić sprawdzanie drugiego z powyższych warunków wprowadźmy zmienną j, która będzie zliczała wykonania pętli. Sprawdzana liczba będzie pierwsza, jeśli wykonamy pętle tyle razy ile mamy na tablicy liczb i nie otrzymamy reszty 0 w ostatnim dzieleniu. Wprowadźmy zmienną flagapoz, której zadaniem będzie zliczanie powtórzeń pętli, w których osiągnęliśmy resztę inną niż 0. Ostatecznie otrzymujemy: ŹRÓDŁO flaga=1;//zmienna warunkująca wykonywanie pętli while 2. flagapoz=0;//zmienna zliczająca ilość dzieleń z resztą inną niż 0 3. j=0;//licznik wykonania pętli while 4. while(flaga!=0) 5. { 6. j++; 7. if(j>illiczb liczba%liczp[j]==0){ 8. flaga=0;//jeśli wykonaliśmy dzielenie dla wszystkich liczb pierwszych 2

3 //z poprzedniego zakresu lub otrzymaliśmy resztę równą 0 //kończymy działanie pętli 9. } 10. else{ 11. flagapoz++;//jeśli nie zwiększamy zmienną flagapoz 12. } 13. } 14. if(flagapoz==illiczb){ 15. nilliczb++;//jeśli wartości zmiennych flagapoz i illiczb są takie same //oznacza to że podczas dzielenia ani razu nie otrzymaliśmy //reszty 0, co wskazuje iż liczba jest pierwsza 16. liczp[nilliczb]=liczba;//więc zapisujemy ją na tablicy 17. } 18. } Zmieńmy teraz 13 linie Źródła 1, aby wykluczyć sprawdzanie liczb parzystych, a tym samym zmniejszyć ilość powtórzeń pętli o połowę. Wystarczy zmienną, operującą pętlą, zwiększać o 2 przy każdym przejściu pętli. Musimy przy tym zacząć od liczby nieparzystej ŹRÓDŁO for(liczba=9; liczba<=100; liczba+=2){ Dodajmy jeszcze funkcję pauza, która zatrzyma działanie programu po wyświetleniu każdych 23 linii wyników i umożliwi wyświetlenia kolejnych wyników lub wyjście z programu. Funkcja ma postać: ŹRÓDŁO void pauza() 2. { 3. char znak; 4. if(ilwierszy==24){ 5. printf("[enter] - następna strona wyników; [k] - koniec programu"); 6. if((znak=getchar())!='k'){ 7. clrscr(); 8. ilwierszy=0; 9. } 10. else{ 11. exit(0); 12. } 13. } 14. } Odwołanie do funkcji umieśćmy po wypisaniu na ekranie znalezionej liczby pierwszej. Funkcja wykorzystuje zmienną globalną ilwierszy, która powiększa swoją wartość o jeden po każdym wypisaniu wyniku. Otwieranie wyższych zakresów Podzielmy zgromadzony kod na funkcje. Zmienne ze Źródła 1 określmy jako globalne. Linie 7-11 z tego samego źródła umieśćmy w funkcji init. Z pozostałej części kodu stwórzmy funkcję szukaj i przenieśmy zmienne flaga, flagapoz oraz j do tej funkcji w postaci zmiennych lokalnych. Dołączmy jeszcze bibliotekę conio.h i zastosujmy funkcję clrscr() w procedurze init. Dodajmy jeszcze zmienne minz i maxz, którymi będziemy regulować prace pętli for w funkcji szukaj. Do całości dołączmy funkcje pauza. 3

4 Na koniec zmodyfikujmy sposób wyświetlania wyników. Usuńmy pętle z linii Źródła 1, która wypisywała zawartość tablicy liczp po wyszukiwaniu liczb. Zamiast niej dodajmy printf("%i\n",liczba); po kodzie dodającym kolejną liczbę do tablicy, oraz w funkcji init kod wypisujący liczby wpisane na tablice w tejże funkcji. Ostatecznie otrzymujemy: ŹRÓDŁO #include<stdio.h> 2. #include<stdlib.h> 3. #include<conio.h>//dołączamy potrzebne biblioteki 4. long int liczp[ ];//zwiększamy rozmiar i zakres tablicy 5. long int illiczb,nilliczb; 6. long int liczba; 7. long int minz, maxz;//dodajemy zmienne minz i maxz do obsługi pętli for //w funkcji szukaj 8. short int ilwierszy;//dodajemy zmienną ilwierszy dla funkcji pauza 9. void init(){ 10. clrscr(); 11. liczp[1]=2; 12. liczp[2]=3; 13. liczp[3]=5; 14. liczp[4]=7; 15. illiczb=4; 16. nilliczb=illiczb; 17. printf("%i\n%i\n%i\n%i\n",liczp[1],liczp[2],liczp[3],liczp[4]); 18. ilwierszy=4;//wpisujemy na tablicę początkowe liczby pierwsze dla //N=100 i wypisujemy je na ekranie 19. } 20. void pauza() 21. { 22. char znak; 23. if(ilwierszy==23){ 24. printf("[enter] - następna strona wyników; [k] - koniec programu"); 25. if((znak=getchar())!='k'){ 26. clrscr(); 27. ilwierszy=0; 28. } 29. else{ 30. exit(0); 31. } 32. } 33. } 34. void szukaj() 35. { 36. short int flaga; 37. long int flagapoz, j; 38. illiczb=nilliczb; 39. for(liczba=minz; liczba<=maxz; liczba+=2) 40. { 41. flaga=1; 42. flagapoz=0; 43. j=0; 4

5 44. while(flaga!=0) 45. { 46. j++; 47. if(j>illiczb liczba%liczp[j]==0){ 48. flaga=0; 49. } 50. else{ 51. flagapoz++; 52. } 53. } 54. if(flagapoz==illiczb){ 55. nilliczb++; 56. liczp[nilliczb]=liczba; 57. printf("%i\n",liczba);//jeśli liczba jest pierwsza to ją wypisujemy 58. ilwierszy++;//zwiększamy zmienną przechowującą ilość wykorzystanych //wierszy na ekranie 59. pauza();//i odwołujemy się do funkcji pauza 60. } 61. } 62. } 63. main() 64. { 65. init(); 66. minz=9; 67. maxz=100; 68. szukaj(); 69. minz=101; 70. maxz=10000; 71. szukaj(); 72. minz=10001; 73. maxz= ; 74. szukaj(); 75. getchar(); 76. } W liniach określamy ramy zakresów (zmienne minz i maxz) i wywołujemy funkcję szukaj, która sprawdza liczby z kolejnych zakresów na podstawie zgromadzonych wcześniej na tablicy danych. Powyższy kod wyszukuje liczby pierwsze mniejsze od Kolejny zakres obejmowałby liczby od do 10 16, jednak próba sprawdzenia tak dużych liczb powoduje pojawienie się nowych problemów. Jeszcze wyższe zakresy Część liczb ze zbioru od do wykracza poza zakres zmiennej liczba w której są przechowywane sprawdzane wartości. Nie będzie więc możliwe wykonywanie obliczeń ani operowanie pętlą for w procedurze szukaj. Wykorzystajmy nową zmienną do operowania tą pętlą. Dodajmy też drugą pętlę for. Ujmując schematycznie uzyskamy: ŹRÓDŁO for(int X=1; X<= ; X++){ 2. for(int Y=1; Y<= ; Y++){ 3. //komendy 4. } 5. } 5

6 Komendy zostaną wykonane 10 8 *10 8, czyli razy. Dla przeszukania zakresu liczb do potrzebne będzie dodanie kolejnych pętli. Problem wykonywania obliczeń na sprawdzanej liczbie wymaga bardziej złożonego rozwiązania. Wykorzystajmy metodę, używaną w bankowości do sprawdzania poprawności numerów rachunków bankowych. Postępując zgodnie z nią, modulo z danej liczby możemy obliczyć, dzieląc sprawdzaną liczbę na części. Gdy to zrobimy obliczamy modulo z pierwszej części, a wynik dopisujemy na początku następnego fragmentu liczby. Obliczamy modulo z otrzymanej liczby i ponownie wynik umieszczamy na początku kolejnej części liczby. Na przykład: Szukamy wyniku następującego działania: % 7 Podzielmy liczbę na części: Obliczmy modulo z pierwszego fragmentu liczby: 21 % 7 = 0 Dopiszmy wynik na początku drugiego fragmentu i obliczmy modulo: 035 % 7 = 0 (liczymy jak 35 % 7) Powtórzmy powyższe czynności aż do uzyskania ostatecznego wyniku: 076 % 7 = % 7 = 4 Otrzymaliśmy ostatecznie 4, więc reszta z dzielenia przez 7 wynosi 4. Dostosujmy tę metodę do potrzeb programu i możliwości języka. Liczbę będziemy przechowywać w postaci rozbitej na tablicy sprliczba. Obliczmy na jak małe fragmenty musimy dzielić liczbę. Największa liczba pierwsza z zakresu do 10 8 to Oznacza to, że podczas sprawdzania kolejnego zakresu największa reszta z dzielenia jaką możemy uzyskać ma wartość Aby nie wykroczyć poza zakres zmiennej, po dopisaniu tej reszty przed fragmentem liczby musimy dzielić sprawdzaną liczbę na części jednocyfrowe. Dołączmy do programu dwie funkcje. Pierwsza z nich będzie zwiększać przechowywaną na tablicy liczbę (nadajmy tej funkcji nazwę powiększ). Druga będzie odpowiedzialna za wykonywanie obliczeń (nazwiemy ją dziel) ŹRÓDŁO void powieksz(){ 2. int wskaznik=1;//wskaźnik rządu na którym operujemy (początkowo wskazuje //na rząd jedności) 3. char flagaws=0; 4. sprliczba[wskaznik]+=2;//powiększamy rząd jedności 5. if(sprliczba[wskaznik]>10){//jeśli wartość rządu jedności przekroczy 10 //musimy ją zredukować do 1 i powiększyć //liczbę w kolejnym rzędzie 6. sprliczba[wskaznik]=1; 7. wskaznik++; 8. while(flagaws==0){ 9. sprliczba[wskaznik]=sprliczba[wskaznik]+1; 10. if(sprliczba[wskaznik]=10){ 11. sprliczba[wskaznik]=0; 12. wskaznik++; 13. }else flagaws=1; 14. }//koniec while 6

7 15. }//koniec if z linii }//koniec funkcji powieksz Zmienna wskaźnik przechowuje pozycje na tablicy na której wykonywane są obliczenia. W liniach 4-6 operujemy na fragmencie liczby, który odwzorowuje rząd jedności. Dlatego zwiększamy tą pozycję o 2, dzięki czemu omijamy w czasie sprawdzania liczby parzyste (UWAGA: musimy zacząć od liczby nieparzystej). Pozostałe pozycje zwiększamy o jeden. W liniach 5. i 10. przy pomocy instrukcji if sprawdzamy czy liczby w danym rzędzie osiągnęły (lub przekroczyły w przypadku rzędu jedności) wartość 10. Jeśli tak jest musimy te pozycje zredukować i zwiększyć liczby w kolejnych rzędach. Poniżej kod drugiej ze wspomnianych wcześniej funkcji: ŹRÓDŁO void dziel(){ 2. char flagawyp=0; 3. long int reszta=0; 4. m=40; 5. reszta=0; 6. while(flagawyp==0 && m--){ 7. if(sprliczba[m]!=0)flagawyp=1; 8. }//koniec while 9. while(m>0){ 10. if(reszta!=0)reszta=(reszta*10+sprliczba[m])%liczp[j]; 11. else reszta=sprliczba[m]%liczp[j]; 12. m--; 13. }//koniec while 14. wynikmod=reszta; 15. }//koniec procedury dziel Przy pomocy pętli while w liniach 6-8, z wykorzystaniem zmiennej m, określamy od jakiej pozycji na tablicy zaczynamy operować na liczbie (pozostałe pozycje zawierają zera). Choć różnica w prędkości działania pomiędzy powyższą metodą a tą, która zastosowaliśmy wcześniej może nie być zauważalna jeśli uruchomimy program na niskich zakresach, to jednak dla liczb do 10 8 jej wykorzystywanie wydłuża znacznie czas pracy programu. Dlatego też dla początkowych zakresów będziemy stosować starą metodę. Wprowadźmy zmienną fpid, która będzie regulować z którego algorytmu ma korzystać program. Funkcja szukaj uzyskuje ostatecznie formę: ŹRÓDŁO void szukaj() 2. { 3. short int flaga; 4. long int flagapoz; 5. char flagawyp=0; 6. illiczb=nilliczb; 7. for(long int op1=minz1; op1<=maxz1; op1++) 8. { 9. for(long int op2=minz2; op2<=maxz2; op2++) 10. { 11. flaga=1; 12. flagapoz=0; 7

8 13. j=0; 14. liczba=liczba+2; 15. powieksz(); 16. while(flaga!=0) 17. { 18. j++; 19. if(j>illiczb){ 20. flaga=0; 21. } 22. else{ 23. if(fpid==1) dziel(); 24. else wynikmod=liczba%liczp[j]; 25. if(wynikmod==0){flaga=0;} 26. else{flagapoz++;} 27. } 28. }//koniec while 29. if(flagapoz==illiczb){ 30. nilliczb++; 31. if(fpid==1){ flagawyp=0; 34. for(m=49; m>=1; m--){ 35. if(sprliczba[m]!=0)flagawyp=1; 36. if(flagawyp==1)printf("%i",sprliczba[m]); 37. } 38. printf(" >fpid<\n"); } 41. else{ 42. printf("%i\n",liczba); 43. liczp[nilliczb]=liczba; 44. } 45. ilwierszy++; 46. pauza(); 47. } 48. } 49. } 50. } Jeśli liczba zostanie uzyskana przy użyciu funkcji powiększ i dziel, obok niej pojawi się napis >fpid< (38. linia kodu). Dodatkowo liczby w ten sposób uzyskane nie są zapisywane na tablicy. Funkcję init uzupełniamy w następujący sposób: ŹRÓDŁO void init(){ 2. clrscr(); 3. liczp[1]=2; 4. liczp[2]=3; 5. liczp[3]=5; 6. liczp[4]=7; 7. illiczb=4; 8. nilliczb=illiczb; 9. liczba=7; 8

9 10. sprliczba[1]=7; 11. for(int k=2; k<=50; k++){ 12. sprliczba[k]=0; 13. } 14. printf("%i\n%i\n%i\n%i\n",liczp[1],liczp[2],liczp[3],liczp[4]); 15. ilwierszy=4; 16. } Funkcja main przybiera postać: ŹRÓDŁO main() 2. { 3. init(); 4. fpid=0; 5. minz1=1; 6. maxz1=1; 7. minz2=1; 8. maxz2=45; 9. szukaj(); 10. minz1=1; 11. maxz1=1; 12. minz2=1; 13. maxz2=4949; 14. szukaj(); 15. minz1=1; 16. maxz1=1; 17. minz2=1; 18. maxz2= ; 19. szukaj(); 20. fpid=1; 21. minz1=1; 22. maxz1= ; 23. minz2=1; 24. maxz2= ; 25. szukaj(); 26. getchar(); 27. } Zmienne globalne programu: ŹRÓDŁO long int liczp[ ]; 2. unsigned long int sprliczba[50]; 3. int illiczb,nilliczb; 4. unsigned long int liczba, wynikmod, j; 5. int minz1, maxz1, minz2, maxz2; 6. short int ilwierszy; 7. char m, fpid; Można jeszcze bardziej przyspieszyć działanie programu poprzez uzależnienie wywołania funkcji powieksz w linii 15. Źródła 7 od wartości zmiennej fpid i wypełnienie w odpowiedni sposób tablicy sprliczba w funkcji init. 9

10 Zwróćmy uwagę na wartości przypisywane zmiennym min1, max1, min2 oraz max2 przed wykonaniem każdego przesiewu. W czasie pierwszego wywołania funkcji szukaj musimy sprawdzić liczy od 1 do 100. Odrzucamy jednak liczbę 1 (bo ma tylko jeden dzielnik) i początkowe liczby pierwsze (2,3,5,7). Pomijamy także liczbę 100 (bo jest parzysta). Przeszukiwanie zaczynamy od liczby 9 (najbliższej nieparzystej po 7). Nie sprawdzamy także pozostałych parzystych, więc w istocie musimy wykonać działania na następującej ilości liczb: (99-9) / 2 = 45. W drugim przesiewie przeszukujemy liczby od 101 do 9999 (pomijamy 100 i bo są parzyste). Po odliczeniu pozostałych liczb parzystych z tego zakresu pozostaje nam: ( ) / 2 = Analogicznie obliczamy ilość koniecznych powtórzeń pętli dla pozostałych zakresów. Trzeba tu jednak zwrócić uwagę na rozbicie obliczonych wartości na dwie zmienne dla zakresu od do Jest to konieczne, ponieważ, jak już wyżej zostało to wspomniane, liczba wykracza poza zakres zmiennej. Oczywiście podane przeze mnie wartości są tylko jedną z wielu możliwości. Można je zastąpić dowolnymi liczbami mieszczącymi się w zakresie zmiennych, których iloczyn wyniesie tyle, ile ilość koniecznych powtórzeń, jaką obliczymy dla zakresu do według podanego wyżej schematu. Kolejne zakresy i problemy z nimi związane Wykonanie przesiewu dla następnego zakresu czyli dla liczb do wiąże się z koniecznością rozwiązania nowych problemów. Pierwszym jest zapisanie, wykraczających poza zakresy zmiennych, liczb uzyskanych wcześniej. Można zastosować tablice wielowymiarową, gdzie każdy wiersz zawiera jedną liczbę rozbitą na fragmenty. Powstaje jednak problem wykonywania obliczeń przy pomocy tych liczb. Rozważyć należy zatem zapis uzyskanych wcześniej liczb pierwszych w postaci sumy iloczynów. Każdą liczbę pierwszą można przedstawić jako sumę wielokrotność liczb uzyskanych wcześniej. Następnie obliczenia dla wyższych zakresów wykonywać można, wykorzystując właściwości działań na liczbach. Inną metodą może być wykorzystanie hipotezy Goldbacha, zgodnie z którą każda liczba naturalna parzysta większa od 2 jest sumą dwóch liczb pierwszych. 1 Zakładając jej prawdziwość dochodzimy do prostego wniosku, że każda liczba nieparzysta większa od 2 jest sumą dwóch liczb pierwszych pomniejszoną o jeden. Tak więc można spróbować przedstawić odnalezione liczby pierwsze właśnie w takiej postaci. Nadal jednak nie mamy prostej metody wykonywania dalszych obliczeń i nade wszystko musimy pamiętać, że hipoteza ta nie została do dnia dzisiejszego jednoznacznie rozstrzygnięta, choć większość współczesnych matematyków uważa, że jest ona prawdziwa. 2 Niezależnie od tego jaki sposób zapisu i wykonywania obliczeń na odnalezionych liczbach pierwszych wybierzemy, konieczne będzie znaczne rozbudowanie algorytmu sprawdzającego liczby z kolejnych zakresów. Spowoduje to wydłużenie czasu sprawdzania, który, choć początkowo tak krótki, że, bez zatrzymania pracy programu po wyświetleniu każdej partii informacji, nie jest możliwe wychwycenie poszczególnych liczb, po wejściu do zakresu zwiększa się do kilku (a w miarę zbliżania się do końca zakresu nawet kilkudziesięciu) sekund na odnalezienie jednej liczby. Problemem, oprócz formy zapisu liczb, jest też miejsce na ich zapis. Ilość liczb pierwszych jakie zostaną odnalezione z zakresu do jest tak duża, że należy zastanowić się nad ich zapisem poza programem (na przykład w zewnętrznym pliku). Kłopotów związanych z przesiewem kolejnych zakresów jest znacznie więcej. Prawdopodobnie wiele nowych ujawni się w czasie pracy nad rozwiązaniem tych, które jesteśmy w stanie przewidzieć. 1 Definicja hipotezy Goldbacha na podstawie strony internetowej 2 Do tej pory udało się jedynie wykazać, że hipoteza Goldbacha jest prawdziwa dla liczb naturalnych mniejszych niż informacje na podstawie strony internetowej 10

11 Największa odkryta dotychczas liczba pierwsza składa się z ponad 7 milionów cyfr (poprzednia zawierała ponad 6 milionów cyfr, a wcześniejsza ponad 4 miliony). Dla pierwszej osoby (lub zespołu), która odnajdzie liczbę pierwszą dłuższą niż 10 milionów cyfr, przewidziana jest nagroda dolarów (nagroda dla osoby, która jako pierwsza odnalazła liczbę pierwszą mającą więcej niż milion cyfr, wynosiła dolarów). DODATEK SPECJALNY Najmniejsza liczba pierwsza z zakresu 9 99: 2 Największa liczba pierwsza z zakresu 9 99: 97 Najmniejsza liczba pierwsza z zakresu : 101 Największa liczba pierwsza z zakresu : 9973 Najmniejsza liczba pierwsza z zakresu (10 8-1): Największa liczba pierwsza z zakresu (10 8-1): Najmniejsza liczba pierwsza z zakresu ( ) ( ): Największa liczba pierwsza odnaleziona przez program, na którym oparte jest to opracowanie (program pozwala na odnalezienie wszystkich liczb pierwszych do problemem jest rosnący czas sprawdzania liczb): (i ciągle szuka ;) Kody źródłowe i opracowanie autorstwa Waldemara Korłub I Liceum Ogólnokształcące w Kwidzynie 11

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu

Bardziej szczegółowo

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; } Pętle Pętle (ang. loops), zwane też instrukcjami iteracyjnymi, stanowią podstawę prawie wszystkich algorytmów. Lwia część zadań wykonywanych przez programy komputerowe opiera się w całości lub częściowo

Bardziej szczegółowo

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia 1. Liczby naturalne, podzielność, silnie, reszty z dzielenia kwadratów i sześcianów przez małe liczby, cechy podzielności przez 2, 4, 8, 5, 25, 125, 3, 9. 26 września 2009 r. Uwaga: Przyjmujemy, że 0 nie

Bardziej szczegółowo

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: 1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: * Jan Kowalski * * ul. Zana 31 * 3. Zadeklaruj zmienne przechowujące

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek Nazwa implementacji: Nauka języka Python pętla for Autor: Piotr Fiorek Opis implementacji: Poznanie innego rodzaju pętli, jaką jest pętla for w języku Python. Składnia pętli for jest następująca: for

Bardziej szczegółowo

Przykładowe zadania z teorii liczb

Przykładowe zadania z teorii liczb Przykładowe zadania z teorii liczb I. Podzielność liczb całkowitych. Liczba a = 346 przy dzieleniu przez pewną liczbę dodatnią całkowitą b daje iloraz k = 85 i resztę r. Znaleźć dzielnik b oraz resztę

Bardziej szczegółowo

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. 2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. 11 października 2008 r. 19. Wskazać takie liczby naturalne m,

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język C, tablice i funkcje (laboratorium, EE1-DI) Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Proste programy w C++ zadania

Proste programy w C++ zadania Proste programy w C++ zadania Zbiór zadao do samodzielnego rozwiązania stanowiący powtórzenie materiału. Podstawy C++ Budowa programu w C++ Dyrektywy preprocesora Usunięcie dublujących się nazw Częśd główna

Bardziej szczegółowo

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi: Program 20 Napisać następujące funkcje: funkcję pobierającą (z klawiatury) zawartość tablicy liczb całkowitych podanej jako parametr, o długości podanej jako parametr; funkcję wypisującą zawartość tablicy

Bardziej szczegółowo

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst. Schematy blokowe I Jeżeli po schematach blokowych będzie używany język C, to należy używać operatorów: '&&', ' ', '!=', '%' natomiast jeśli Ruby to 'and', 'or', '%', '!='. 1. Dostępne bloki: a) początek:

Bardziej szczegółowo

Blockly Kodowanie pomoc.

Blockly Kodowanie pomoc. 1 Blockly Kodowanie pomoc. Słowniczek: Zmienna posiada nazwę wywoływaną w programie oraz miejsce na przechowywanie wartości. Instrukcja warunkowa pozwala na wykonanie instrukcji w zależności od warunku

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

Zestaw zadań dotyczących liczb całkowitych

Zestaw zadań dotyczących liczb całkowitych V Zestaw zadań dotyczących liczb całkowitych Opracowanie Monika Fabijańczyk ROZDZIAŁ 1 Cechy podzielności Poniższe zadania zostały wybrane z różnych zbiorów zadań, opracowań, konkursów matematycznych.

Bardziej szczegółowo

Warunki logiczne instrukcja if

Warunki logiczne instrukcja if Warunki logiczne instrukcja if Prowadzący: Łukasz Dunaj, strona kółka: atinea.pl/kolko 1. Wejdź na stronę kółka, uruchom edytor i wpisz: use console; def test::main() { var y; y = 1; while (y

Bardziej szczegółowo

Programowanie - instrukcje sterujące

Programowanie - instrukcje sterujące Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication

Bardziej szczegółowo

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja Pętle W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. Instrukcja for ma następującą postać: for (w1;w2;w3) instrukcja w1, w2, w3 są wyrażeniami Schemat blokowy

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Język C, instrukcje sterujące (laboratorium)

Język C, instrukcje sterujące (laboratorium) Język C, instrukcje sterujące (laboratorium) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Na podstawie http://pl.wikibooks.org/wiki/c Wstęp Instrukcja warunkowa Instrukcja if/if-else pozwala na warunkowe

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski Programowanie w C/C++ Instrukcje - konstrukcje powtórka LABORKA Piotr Ciskowski zadanie 1. Licz się ze sobą Napisz funkcję bez argumentów i bez wyniku, która za każdym wywołaniem będzie podawała, ile razy

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Ciąg Fibonacciego fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2), gdzie n 2 Elementy tego ciągu stanowią liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem

Bardziej szczegółowo

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------- Strona1 Napisz program, który czyta zdanie, a następnie wypisuje po kolei długości kolejnych jego wyrazów. Zakładamy, że zdanie zawiera litery alfabetu łacińskiego i spacje (po jednej pomiędzy dwoma dowolnymi

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Program 14. #include #include using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

2.8. Algorytmy, schematy, programy

2.8. Algorytmy, schematy, programy https://app.wsipnet.pl/podreczniki/strona/38766 2.8. Algorytmy, schematy, programy DOWIESZ SIĘ co oznaczają pojęcia: algorytm, schemat blokowy, język programowania, jakie są sposoby obliczania największego

Bardziej szczegółowo

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak: Tablice Tablice jednowymiarowe Jeżeli nasz zestaw danych składa się z wielu drobnych elementów tego samego rodzaju, jego najbardziej naturalnym ekwiwalentem w programowaniu będzie tablica. Tablica (ang.

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Języki formalne i techniki translacji

Języki formalne i techniki translacji Języki formalne i techniki translacji Laboratorium - Projekt Termin oddania: ostatnie zajęcia przed 17 stycznia 2016 Wysłanie do wykładowcy: przed 23:59 28 stycznia 2016 Używając BISON-a i FLEX-a napisz

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie. Lista 1 Utworzenie tablicy jest równoznaczne z alokacją pamięci na elementy tablicy (utworzeniem dynamicznej tablicy). W zadaniach należy pamiętać o zwolnieniu zasobów przydzielonych na stercie. Zabronione

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

if (wyrażenie ) instrukcja

if (wyrażenie ) instrukcja if (wyrażenie ) instrukcja Jeśli wartość wyrażenia jest różna od zera, to jest wykonywana instrukcja, jeśli wartość wyrażenia jest równa 0, to dana instrukcja nie jest wykonywana Wyrażenie testowe podajemy

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

PROGRAMOWANIE W C++ ZADANIA

PROGRAMOWANIE W C++ ZADANIA PROGRAMOWANIE W C++ ZADANIA Włodzimierz Gajda Rozdział 7 PĘTLE 7.1 PĘTLA FOR: rysowanie wzorków. ZADANIE 7.1.1 Napisz program drukujący na ekranie 19 gwiazdek: ******************* ZADANIE 7.1.2 Napisz

Bardziej szczegółowo

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu

Bardziej szczegółowo

1 Wielokrotne powtarzanie tych samych operacji

1 Wielokrotne powtarzanie tych samych operacji 1 Wielokrotne powtarzanie tych samych operacji Zadanie 1. roszę porównać następujące programy(efekt działania każdego z nich jest takisam). rzykład 1 przedstawia najbardziej typowy zapis, powodujący wykonanie

Bardziej szczegółowo

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) 1. Liczby wymierne. - wartość bezwzględna liczby. dla 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) - dla < 0 ( wartością bezwzględną liczby ujemnej jest liczba do niej przeciwna) W interpretacji

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4 Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Nr 4 Algorytmy sortowania zewnętrznego 1 Wstęp Bardzo często przy rozwiązywaniu praktycznych

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic: Tablice TEORIA Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Dzięki stosowaniu tablic, zamiast nazywania każdej z np. stu zmiennych osobno możemy zabudować tablicę 100-elementową,

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

Bardziej szczegółowo

JAVAScript w dokumentach HTML (2)

JAVAScript w dokumentach HTML (2) Informatyka ćw.6 JAVAScript w dokumentach HTML (2) Interakcyjne wprowadzanie danych Jednym ze sposobów jest stosowanie metody prompt dla wbudowanego obiektu window: zmienna= prompt("tekst zachęty, np.

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

Rozwiązanie: Zastosowanie twierdzenia o kątach naprzemianległych

Rozwiązanie: Zastosowanie twierdzenia o kątach naprzemianległych GEOMETRYCZNE 1) Dany jest prostokąt ABCD. Bok AB podzielono na trzy równe odcinki: AX, XY i YB. Wyznaczono trójkąty DAX, DXY i DYB. Uzasadnij, że wyznaczone trójkąty mają równe pola. Wizualizacja zadania

Bardziej szczegółowo

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy Matematyka, królowa nauk Edycja X - etap 2 Bydgoszcz, 16 kwietnia 2011 Fordoński

Bardziej szczegółowo

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie

Bardziej szczegółowo

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1 Robert Malenkowski 1 Liczby rzeczywiste. 1 Liczby naturalne. N {0, 1,, 3, 4, 5, 6, 7, 8...} Liczby naturalne to liczby używane powszechnie do liczenia i ustalania kolejności. Liczby naturalne można ustawić

Bardziej szczegółowo

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI Arytmetyka komputera Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka Opracował: Kamil Kowalski klasa III TI Spis treści 1. Jednostki informacyjne 2. Systemy liczbowe 2.1. System

Bardziej szczegółowo

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby Scenariusz zajęć Moduł VI Projekt Gra logiczna zgadywanie liczby Moduł VI Projekt Gra logiczna zgadywanie liczby Cele ogólne: przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka

Bardziej szczegółowo

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. (c.d.

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. (c.d. 2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. (c.d.) 10 października 2009 r. 20. Która liczba jest większa,

Bardziej szczegółowo

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem Moduł 1 1. Wprowadzenie do języka Python Python jest dynamicznym językiem interpretowanym. Interpretowany tzn. że kod, który napiszemy możemy natychmiast wykonać bez potrzeby tłumaczenia kodu programistycznego

Bardziej szczegółowo

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Język PHP Język interpretowalny, a nie kompilowany Powstał w celu programowania

Bardziej szczegółowo

Pomorski Czarodziej 2016 Zadania. Kategoria C

Pomorski Czarodziej 2016 Zadania. Kategoria C Pomorski Czarodziej 2016 Zadania. Kategoria C Poniżej znajduje się 5 zadań. Za poprawne rozwiązanie każdego z nich możesz otrzymać 10 punktów. Jeżeli otrzymasz za zadanie maksymalną liczbę punktów, możesz

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych. Może posiadać określone atrybuty, a odwołanie do niego odbywa się poprzez nazwę. Każdy plik ma skończoną

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Podzielność, cechy podzielności, liczby pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

Podzielność, cechy podzielności, liczby pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. Podzielność, cechy podzielności, liczby pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. W dniu 3 października 2013 r. omawiamy test kwalifikacyjny. Uwaga: Przyjmujemy, że 0 nie

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.

Bardziej szczegółowo

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16 M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16

Bardziej szczegółowo

Wstęp do Informatyki

Wstęp do Informatyki Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 1 / 1 DZIELENIE LICZB BINARNYCH Dzielenie

Bardziej szczegółowo

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

Bardziej szczegółowo

Praca domowa nr 1. a a b a b ; b c. c a bc d ef gh. 2) Napisz kod sprawdzający poniższe warunki sformułowane w języku naturalnym:

Praca domowa nr 1. a a b a b ; b c. c a bc d ef gh. 2) Napisz kod sprawdzający poniższe warunki sformułowane w języku naturalnym: Praca domowa nr 1 1) Napisz kod w języku C obliczający wartość poniższych wyrażeń; załóż, że każda litera oznacza pojedynczą zmienną typu int: a bc ; a b c ; bc a a b a b ; b c d e f g ; a b c d e d ef

Bardziej szczegółowo

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Publikacja jest dystrybuowana bezpłatnie Program Operacyjny Kapitał Ludzki Priorytet 9 Działanie 9.1 Poddziałanie

Bardziej szczegółowo

Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI

Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI Matematyka dla liceum ogólnokształcącego i technikum w zakresie podstawowym i rozszerzonym Z E S Z Y T M E T O D Y C Z N Y Miejski

Bardziej szczegółowo

LICZBY PIERWSZE. Jan Ciurej Radosław Żak

LICZBY PIERWSZE. Jan Ciurej Radosław Żak LICZBY PIERWSZE Jan Ciurej Radosław Żak klasa IV a Katolicka Szkoła Podstawowa im. Świętej Rodziny z Nazaretu w Krakowie ul. Pędzichów 13, 31-152 Kraków opiekun - mgr Urszula Zacharska konsultacja informatyczna

Bardziej szczegółowo

Programowanie, algorytmy i struktury danych

Programowanie, algorytmy i struktury danych 1/44 Programowanie, algorytmy i struktury danych materiały do wykładu: http://cez.wipb.pl/moodle/ email: m.tabedzki@pb.edu.pl strona: http://aragorn.pb.bialystok.pl/~tabedzki/ Marek Tabędzki Wymagania

Bardziej szczegółowo

Programowanie strukturalne i obiektowe

Programowanie strukturalne i obiektowe Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Funkcja kwadratowa. f(x) = ax 2 + bx + c, Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax 2 + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax 2, a R \

Bardziej szczegółowo

Zajęcia 3: pętle. Python dla kognitywistów. Marcin Jukiewicz. Marcin Jukiewicz Zajęcia 3: pętle 1 / 17

Zajęcia 3: pętle. Python dla kognitywistów. Marcin Jukiewicz. Marcin Jukiewicz Zajęcia 3: pętle 1 / 17 Zajęcia 3: pętle Python dla kognitywistów Marcin Jukiewicz Marcin Jukiewicz Zajęcia 3: pętle 1 / 17 Typ zmiennej Niekiedy pojawiają się wątpliwości co do typu jaki przyjęła dana zmienna. Typ zmiennej można

Bardziej szczegółowo

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 1 Podstawy Wprowadzenie do programowania w języku C Kraków 2010 Twój pierwszy program w C Program w języku C, jak i w wielu innych językach

Bardziej szczegółowo

* Funkcje, podprogramy

* Funkcje, podprogramy Funkcje, podprogramy Jak go ulepszyć? Co będzie jak tych tablic będzie 100? A co będzie jak będą to różne tablice? A jak byśmy tak chcieli sobie ułatwić życie? Funkcja w matematyce, to takie coś: f x

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

Język C zajęcia nr 5

Język C zajęcia nr 5 Język C zajęcia nr 5 Instrukcja wyboru switch switch ( wyr ) inst Głównym przeznaczeniem instrukcji switch jest rozgałęzianie wykonania programu na wiele różnych ścieżek w zależności od wartości pewnego

Bardziej szczegółowo

Bukiety matematyczne dla gimnazjum

Bukiety matematyczne dla gimnazjum Bukiety matematyczne dla gimnazjum http://www.mat.uni.torun.pl/~kolka/ 1 X 2002 Bukiet I Dany jest prostokąt o bokach wymiernych a, b, którego obwód O i pole P są całkowite. 1. Sprawdź, że zachodzi równość

Bardziej szczegółowo

INSTRUKCJE REPETYCYJNE PĘTLE

INSTRUKCJE REPETYCYJNE PĘTLE INSTRUKCJE REPETYCYJNE PĘTLE Pętla while( ) while ( wyrażenie ) instrukcja; while ( wyrażenie ) instrukcja_1; instrukcja_2;... instrukcja_n; Pętla wykonywana jest tak długo jak wartość wyrażenie jest różna

Bardziej szczegółowo

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. Jarosław Wróblewski Matematyka dla Myślących, 008/09. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. 15 listopada 008 r. Uwaga: Przyjmujemy,

Bardziej szczegółowo