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

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

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. 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

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

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 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

- - Ocena wykonaniu zad3. Brak zad3

- - Ocena wykonaniu zad3. Brak zad3 Indeks Zad1 Zad2 Zad3 Zad4 Zad Ocena 20986 218129 ocena 4 Zadanie składa się z Cw3_2_a oraz Cw3_2_b Brak opcjonalnego wywołania operacji na tablicy. Brak pętli Ocena 2 Brak zad3 Ocena wykonaniu zad3 po

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

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { 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

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

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony. Iteracje Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony. Iteracja inaczej zwana jest pętlą i oznacza wielokrotne wykonywanie instrukcji. Iteracje

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

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal Instrukcja wyboru, pętle 2 wykład. Podstawy programowania - Paskal Tematy Instrukcja wyboru jeden z wielu wariantów: case Pętle while repeat for Instrukcje sterowania pętli break continue goto Instrukcja

Bardziej szczegółowo

Pętle. Dodał Administrator niedziela, 14 marzec :27

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

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

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

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

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

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

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

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

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach Tablice Powiedzmy, że chcemy zapamiętać w programie

Bardziej szczegółowo

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================

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

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

Programowanie w Baltie klasa VII

Programowanie w Baltie klasa VII Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.

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

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty. Algorytm Euklidesa Algorytm ten, jak wskazuje jego nazwa, został zaprezentowany przez greckiego matematyka - Euklidesa, żyjącego w w latach około 300r. p.n.e., w jego podstawowym dziele pt. Elementy. Algorytm

Bardziej szczegółowo

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

Zadania do samodzielnego rozwiązania

Zadania do samodzielnego rozwiązania Zadania do samodzielnego rozwiązania I. Podzielność liczb całkowitych 1. Pewna liczba sześciocyfrowa a kończy się cyfrą 5. Jeśli tę cyfrę przestawimy na miejsce pierwsze ze strony lewej, to otrzymamy nową

Bardziej szczegółowo

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny ALGORYMY Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu

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

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

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Chen Prime Liczby pierwsze Chena

Chen Prime Liczby pierwsze Chena Chen Prime Liczby pierwsze Chena Chen Jingrun Data urodzenia: 22 maj 1933 Data śmierci: 19 marzec 1996 Pochodzi z wielodzietnej rodziny z Fuzhou, Fujian, Chiny. W 1953 roku skończył wydział matematyki

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

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

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

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

Instrukcje sterujące

Instrukcje sterujące Podstawy programowania w C++ Bibliografia: Instrukcje sterujące Nauka programowania dla początkujących; A. Struzińska-Walczak / K. Walczak CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Opracował:

Bardziej szczegółowo

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Pzetestuj działanie pętli while i do...while na poniższym przykładzie: Pzetestuj działanie pętli while i do...while na poniższym przykładzie: Zadania pętla while i do...while: 1. Napisz program, który wczytuje od użytkownika liczbę całkowitą, dopóki podana liczba jest mniejsza

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

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala

Bardziej szczegółowo

Lekcja : Tablice + pętle

Lekcja : Tablice + pętle Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie

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

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

5. Rekurencja. Przykłady

5. Rekurencja. Przykłady 5. Rekurencja Uwaga! W tym rozdziale nie są omówione żadne nowe konstrukcje języka C++. Omówiona jest za to technika wykorzystująca funkcje, która pozwala na rozwiązanie pewnych nowych rodzajów zadań.

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

Program 14. #include <iostream> #include <ctime> 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

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

Zestaw A-1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: 4,3,3 2,2,1 Zad. 2: 3,3,3 Zad.

Zestaw A-1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: 4,3,3 2,2,1 Zad. 2: 3,3,3 Zad. Zestaw A-1: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Napisać pakiet rodzajowy udostępniający: typ Sznur będący dynamiczną listą łączoną, której elementy przechowują

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 4 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Pętle wykonujące się podaną liczbę razy Jeśli chcemy wykonać pewien fragment programu określoną liczbę razy, możemy użyć

Bardziej szczegółowo

1 Powtórzenie wiadomości

1 Powtórzenie wiadomości 1 Powtórzenie wiadomości Zadanie 1 Napisać program, który w trybie dialogu z użytkownikiem przyjmie liczbę całkowitą, a następnie wyświetli informację czy jest to liczba parzysta czy nieparzysta oraz czy

Bardziej szczegółowo

Język C, tablice i funkcje (laboratorium)

Język C, tablice i funkcje (laboratorium) Język C, tablice i funkcje (laboratorium) 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. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 4 Instrukcje sterujące, operatory 1 programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe ; instrukcja_krok ) tresc_petli ; instrukcja_ini

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok

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

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

Czy liczby pierwsze zdradzą swoje tajemnice? Czy liczby pierwsze zdradzą swoje tajemnice?

Czy liczby pierwsze zdradzą swoje tajemnice? Czy liczby pierwsze zdradzą swoje tajemnice? Czy liczby pierwsze zdradzą swoje tajemnice? Czy liczby pierwsze zdradzą swoje tajemnice? Wstęp Liczby pierwsze były tematem rozważań uczonych już od wieków. Pierwsze wzmianki na temat liczb pierwszych

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

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

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawowe algorytmy i ich implementacje w C. Wykład 9 Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny

Bardziej szczegółowo

do instrukcja while(wyrażenie);

do instrukcja while(wyrażenie); emat zajęć: Operatory i instrukcje w języku C - 3 Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (instrukcja cyklu: while) Język C oferuje kilka instrukcji cyklu (pętli). Oprócz wprowadzonej wcześniej

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

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

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. 8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

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

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

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest Pętle Pętla to pewien fragment kodu, który jest wykonywany wielokrotnie. Wyobraź sobie taką sytuację. Piszesz program do szyfrowania danych. Dane są szyfrowane kolejno bajt po bajcie. Załóżmy, że plik

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

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16 Na ćwiczeniach 6.0.205 omawiamy test kwalifikacyjny. Uwaga: Przyjmujemy, że 0 nie jest liczbą naturalną, tzn. liczby naturalne są to liczby całkowite dodatnie.. Sformułować uogólnione cechy podzielności

Bardziej szczegółowo

Sortowanie zewnętrzne

Sortowanie zewnętrzne Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Sortowanie zewnętrzne 1 Wstęp Bardzo często

Bardziej szczegółowo

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy

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

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

---------------------------------------------------------------------------------------------------------------------------- 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

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne 1 Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,

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

Wyszukiwanie. Wyszukiwanie binarne

Wyszukiwanie. Wyszukiwanie binarne Wyszukiwanie Wejście: posortowana, n-elementowa tablica liczbowa T oraz liczba p. Wyjście: liczba naturalna, określająca pozycję elementu p w tablicy T, bądź 1, jeŝeli element w tablicy nie występuje.

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

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy

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

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu: ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu: Rys1 Ćwiczenie 2 Podaj jaki ciąg znaków zostanie wypisany po wykonaniu

Bardziej szczegółowo

Zestaw C-11: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp i.h)!!! Zad. 1: Zad. 2:

Zestaw C-11: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp i.h)!!! Zad. 1: Zad. 2: Zestaw C-11: funkcję usun rozpatrującą rozłączne trójki elementów sznura i usuwającą te z elementów trójki, które nie zawierają wartości najmniejszej w obrębie takiej trójki (w każdej trójce pozostaje

Bardziej szczegółowo