Zaloguj się

Zarejestruj się

Zapomniałem hasła!

Jażdy problem można rozwiązać na 100 sposobów,
z których każdy jest dobry. Ale jeden jest najlepszy!
Jeśli ktoś znajdzie problem, którego nie da się rozwiązać
to dostanie coś do picia!

Programowanie w języku C

Podstawy

Łatwe zadania oznaczono :-)
  1. :-) Napisz program, który wyświetli na ekranie prostokąt z kreseczek. Mniej więcej taki:

  2. Napisz program o nazwie rec, który wywołany w linii poleceń z dwoma parametrami np. ./rec 10 12, wyświetli prostokąt jak w zadaniu 1 o wymiarach 10 na 12 (w naszym przykładzie).
  3. :-) Zrób kalkulator. Podajesz ./calc 3 * 5 a program daje wynik: 3 * 5 = 15. Podobnie ./calc 3 + 5 daje: 3 + 5 = 8.
  4. Zrób kalkulator, który da poprawny wynik działania przy podaniu parametrów w postaci 2*3, 2 *3, 2 * 3. Zrób to tak aby dawał ostrzeżenie przy niepoprawnych danych np. ./rec 2, 3 daje w wyniku słowo BŁĄD.
  5. Zrób kalkulator, który poda odpowiedni komunikat jeśli podasz za duże liczby.
  6. :-) Zrób sumator, który poda sumę n kolejnych liczb całkowitych. Sprawdź rozwiązanie
  7. Popraw powyższy sumator aby dawał stosowne ostrzeżenie w przypadku zbyt dużego n.
  8. :-) Napisz program, który sprawdzi, czy liczba dzieli się przez 2 lub 3.
  9. :-) Napisz program, który wynik sumowania n liczb wyświetli na ekranie oraz zapisze na dysku komputera.
  10. Napisz program do odgadywania liczb. Np. ja myślę o liczbie 4, komputer pyta się, czy pomyślana liczba jest mniejsza od 10, jeśli tak to pyta się czy jest mniejsza/większa od 6 aż w końcu komputer odgadnie.
  11. Pomóż artylerzyście: jeśli strzelił za daleko to powiedz "za daleko" lub "za blisko" w przeciwnym przypadku. Obmyśl jak artylerzysta powinien strzelać aby trafić marnując najmniej pocisków.
  12. :-) Problem Collatza: bierzemy dowolną liczbę całkowitą, jeśli jest parzysta to dzielimy ją przez dwa, jeśli nieparzysta to mnożymy przez 3 i dodajemy 1. Z wynikiem postępujemy analogicznie. Sprawdź, co w końcu otrzymamy?
  13. Jaką największą liczbę otrzymamy po drodze, jeśli w problemie Collatza zaczniemy od liczby 234567?
  14. :-) Napisz program do rozwiązywania równania kwadratowego ze wszystkimi szykanami.
  15. :-) Podajemy różne liczby a komputer wyświetla największą. Obmyśl szczegóły.
  16. Podajemy dowolne liczby, a komputer drukuje od największej do najmniejszej.
  17. Podajemy różne imiona a komputer drukuje alfabetycznie posortowaną listę imion.
  18. Sprawdź ile razy w rozwinięciu liczby π z dokładnością 2000 miejsc po przecinku występują cyfry 0, 1, 2, ..9.
  19. Sprawdź częstotliwość występowania liter w wybranym tekście w języku polskim i angielskim.
  20. :-) Zrób sobie domowy kalkulator wydatków.

Pętle for, while, do while

Na napisanie programu należy poświęcić nie więcej niż 10 minut na każde zadanie lub o wiele dłużej!
  1. :-) Oblicz sumę liczb od 1 do 100 korzystając z pętli for, while i do while.
  2. Oblicz iloczyn liczb od 1 do n, ze sprawdzeniem, czy nie przekroczono zakresu.
  3. :-) Wygeneruj tabliczkę mnożenia do 100.
  4. Zrób program do obliczania liczb pierwszych. Liczby pierwsze to te, które mają tylko dwa dzielniki: 1 i samą siebie np. 2, 3, 5, 7, 11, 13, 17....
  5. :-) Napisz program do obliczania 2n.
  6. :-) :-( Oblicz sumę s1 = 1 + 1/2 +1/3 + 1/4 +........1/n w dwojaki sposób: sumując od początku i od końca s2 = 1/n + 1/(n-1) +....1/3 + 1/2 + 1/1. Sprawdź ile wyjdzie dla n = 100, n = 1000, n = 10000. Czy otrzymamy tyle samo? Ile wynosi naprawdę taka suma?
  7. Obmyśl sposób na dokładne sumowanie liczb. Poszperaj w Internecie i zobacz jak robili to inni. Napisz program sumujący dokładnie szereg liczb. Podaj dokładność sumowania. Na ten problem poświęć kilka godzin.
  8. Dla jakiego maksymalnego n w zadaniu nr 27 otrzymujemy taką samą sumę? Napisz odpowiedni program. Znajdź najprostszy sposób wyznaczenia takiej liczby.

Operacje wejścia/wyjścia

  1. :-) Napisz najkrótszy program wypisujący na ekranie słowo Witaj.
  2. :-) Napisz program czytający z klawiatury.
  3. :-) Napisz program odczytujący plik zapisany na dysku.
  4. Zrób tak aby komputer zachęcał do podania nazwiska a potem umieszczał je w posortowanym pliku o nazwie KONTAKTY.Plik ten ma być trwale zapisany na dysku.
  5. Niech komputer sprawdza, w programie z zadania 32, czy podane nazwisko już istnieje na liście i podaje stosowny komunikat.

Techniki programistyczne

  1. :-) Oblicz pierwiastek kwadratowy z dwóch korzystając z następującego sposobu:
    • Bierzemy dowolną liczbę np. 100.
    • Obliczamy następne przybliżenie: ½(100 + 2 / 100) = 50,01
    • Obliczamy kolejne przybliżenia wg tej samej reguły biorąc do obliczeń wartość obliczoną w kroku poprzednim.
    • Sprawdź na papierku, że zbieżność takiej metody jest szybka. Po ilu krokach otrzymasz mniej więcej 1,41?
  2. Znajdź taki kąt α dla którego: cos (α) = α.
  3. :-) Zrób programik do wyznaczania liczb Fibonacciego (każda następna jest sumą dwóch poprzednich: 1 1 2 3 5 8 ...).

Rekursja

Poczytaj o rekursji i zrób poniższe zadania z wykorzystaniem właśnie rekursji aczkolwiek można to zrobić inaczej.
  1. :-) Oblicz sumę stu liczb naturalnych.
  2. :-) Oblicz iloczyn: 1*2*3*...
  3. Wyznacz najkrótszą drogę pomiędzy dwoma miastami na mapie.
  4. Rozwiąż problem wież w Hanoi. O tym piszą w Internecie na każdym kroku.
  5. Odwiedź wszystkie pola na szachownicy ruchem skoczka.
  6. Funkcja Ackermana dana jest wzorem:
    • A(m,n)=n+1 gdy m=0
    • A(m,n)=A(m-1,1) gdy m>0 i n=0
    • A(m,n)=A(m-1,A(m,n-1)) gdy m>0 i n>0
    Oblicz A(4,4). Napisz program liczący wartości tej funkcji. W ilu krojach można to zrobić?
  7. Oblicz 10. liczbę Fibonanciego korzystając z programu napisanego w sposób rekurencyjny.
  8. Oblicz pierwiastek z dwóch w sposób rekurencyjny.

Zastosowania

  1. Oblicz czas spadania kamienia z wysokości h z uwzględnieniem oporów proporcjonalnych do prędkości.
  2. Po jakiej krzywej pies goni zająca?
  3. W jaki sposób poruszają się ciała przyciągające się siłą grawitacji?
  4. Po jakim czasie zderzą się dwa kamienie przyciągające się siłą grawitacji Newtona. Początkowo kamienie były nieruchome w odległości 1 m?
  5. Oblicz maksymalny zasięg w rzucie ukośnym z uwzględnieniem oporów.
  6. Napisz program do gry Life.

Uff! Starczy


Komentarze

2015-03-07 09:13:54 Autor: Seweryn Wgielnik

Panie Krzysztofie: dziaa, dziaa! To samo dotyczy Marty. Tempus fugit a Wy jeszcze w pierwszej klasie!