Podstawy programowania, sem.II Laboratorium nr 6
Transkrypt
Podstawy programowania, sem.II Laboratorium nr 6
Podstawy programowania sem.II Laboratorium nr 1 Wprowadzenie do środowiska Dev C++ i arytmetyki 1. Utworzyć katalog dla nowego projektu. Stworzyć nowy projekt konsolowy dla języka C. Napisać program drukujący dwie linie tekstu z zatrzymaniem wyświetlania w oknie ( system("pause") ). Przeprowadzić kompilację, usunąć ewentualne błędy i uruchomić program. Zapisać projekt, zamknąć i otworzyć ponownie. 2. Zdefiniować dwie zmienne typu int, przypisać im wartości, obliczyć ich sumę i wydrukować. Wczytać i wydrukować dwie zmienne a, b typu int . Obliczyć i wydrukować a+b, a-b, a*b, a/b i a modulo b. 3. Zdefiniować zmienne typu float, double i long double, wczytać z klawiatury i wydrukować. Zdefiniować zmienne x i y typu double. Obliczyć i wydrukować a+b, a-b, a*b i a/b. 4. Wprowadzić zabezpieczenie formatu przy wczytywaniu zmiennych np. do { printf("\n Podaj x:"); k=scanf("%lf", &x); if ( k= =0) printf("\n Blad formatu "); fflush(stdin); } while (k= =0); 5. Napisać fragment programu obliczający następujące wyrażenie dla zmiennych x,y typu int i przeanalizować obliczanie wyrażenia dla x=12 i y=5, x2 + w= x + x5 y x + y3 x+y . Podstawy programowania, sem.II Laboratorium nr 2 1. Wczytać dwie zmienne typu x,y typu double i obliczyć wartość następującego wyrażenia: x2 + w= x+ x + x3 x+ y y + y3 x x2 + y2 Podstawić do wyrażenia x=2 i y=3 i porównać z wynikiem z programu dla tych wartości. 4. Zmodyfikować program wprowadzając sprawdzenie wartości każdego z mianowników przy użyciu instrukcji if i zakończenie programu, jeżeli jakiś mianownik jest równy 0, np. if (x-y= =0) { printf("\n x-y=0"); getch(); return 1;} Zrealizować wielokrotne wykonanie programu przy użyciu pętli while (1). 5. Zmodyfikować pętlę while w taki sposób, aby można było sterować ilością wykonań programu' Podstawy programowania, sem.II Laboratorium nr 3 Operatory relacyjne i logiczne. Wyrażenia relacyjne i logiczne 1. Wczytać dwie zmienne typu a,b typu int, obliczyć wydrukować wartości następujących wyrażeń relacyjnych a>b, a>=b, a<b,a<=b, a= = b, a!=b. 2. Wczytać dwie zmienne a,b,c typu int, obliczyć i wydrukować wartości następujących wyrażeń a&&b,a||b,!a,!b,a<=b, a= = b, a!=b, a&&b||c, !a&&b||a&&!b dla wszystkich kombinacji zmiennych a,b,c. 3. Dana jest funkcja logiczna trzech zmiennych mająca wartość 1, gdy dwie z trzech zmiennych mają wartość 1. Zapisać funkcję w postaci SOP ( suma iloczynów) i zrealizować programowo. 4. Napisać funkcje logiczne realizujące sumator 1-bitowy ( sumę i przeniesienie) i zastosować je do symulacji programowej 4-bitowego sumatora szeregowego. Podstawy programowania, sem.II Laboratorium nr 4 Instrukcje if, if else, switch 1.Napisać program realizujący rozwiązanie równania kwadratowego dla współczynników a,b,c wczytywanych z klawiatury. Program powinien uwzględniać wszystkie możliwe przypadki dla współczynników i drukować rozwiązania rzeczywiste lub zespolone. 2. Zastosować instrukcję switch do drukowania liczby całkowitej w postaci słownej. Podstawy programowania, sem.II Laboratorium nr 5 Instrukcje if, if else, switch Instrukcje iteracyjne n 1. Napisać program obliczający wartość wyrażenia y = ∑ ai dla danego n oraz a i i =1 wprowadzanych z klawiatury, wykorzystać pętlę for. 2. Napisać program wypisujący zestawienie temperatur Fahrenheita i odpowiadających im temperatur Celsjusza dla temperatur Fahrenheita w zakresie 20,...,300 stopni, przyjąć przeliczenie temp_Celsjusz=5(temp_Fahrenheit-32)/9, zastosować pętlę while. 3. Napisać program obliczający n! w dwóch wersjach ( wersja z for i wersja z while). 4. Napisać program inicjalizujący generator liczb pseudolosowych przy zastosowaniu funkcji srand( ), następnie generujący przy użyciu funkcji rand( ) 6 liczb pseudolosowych z zakresu (1,49), oraz 10 liczb pseudolosowych z zakresu (0,100> przy użyciu funkcji random(). (należy włączyć plik nagłówkowy stdlib.h) 5. Korzystając z dwóch pętli for napisać program wyświetlający prostokąt o zadanej liczbie wierszy oraz punktów w wierszu, np. lw=4, pw=4. **** **** **** **** 6. Korzystając z dwóch pętli for napisać program wyświetlający trójkąt o zadanej liczbie wierszy lw=4. * ** *** **** Podstawy programowania, sem.II Laboratorium nr 6 Typy rzeczywiste 1. Napisać program wczytujący z klawiatury zmienne x i y typu double i obliczający następujące wyrażenie: x⋅ y x−y , 1 1 + x −1 y −100 x3 + x y + przy wczytywaniu danych zastosować sprawdzanie formatu i dziedziny. 2. Dane jest wyrażenie log 2 ( x − 1) + 3 ctgx + 3 x + e x y= tgx + log sin x + π x 3 a) określić dziedzinę, b) określić zakres x ze względu na zakres typu double, c) napisać program obliczający wartość wyrażenia, zastosować kontrolę wejścia ze względu na format typu double, zakres typu double oraz dziedzinę. 3. Napisać program obliczający wartości rozwinięć w szereg Maclaurina następujących funkcji dla zadanego x i zadanego n wprowadzanego z klawiatury i porównać z wartościami otrzymywanymi przy użyciu odpowiednich funkcji z biblioteki standardowej ( math.h) ∞ x a) e = ∑ n =0 2n ∞ ∞ xn x 2 n +1 n n x , b ) sin x = ∑(−1) , c) cos x = ∑( −1) n! (2n + 1)! (2n)! n =0 n =0 ∞ d) ln(1 + x ) = ∑( −1) n =1 n +1 xn n x 2 n +1 e) arctgx = ∑ (−1) . 2n + 1 n =0 ∞ x <1 , n Podstawy programowania, sem.II Laboratorium nr 7 Tablice jednowymiarowe 1. Zainicjować 5-elementową tablicę liczb typu int i wydrukować. 2. Wczytać z klawiatury 6-elementową tablicę liczb typu int z zabezpieczeniem formatu i wydrukować. 3. Uzupełnić program opracowany w pkt.2 o obliczanie sumy elementów tablicy , sumy elementów parzystych i elementów nieparzystych. 4. Napisać program wczytujący z klawiatury 8-elementową tablicę liczb typu double, następnie obliczyć a) sumy elementów dodatnich i ujemnych, b) sumę elementów o wartościach należących do przedziału [a,b], granice przedziału należy wczytać z klawiatury z zabezpieczeniem formatu i spełniające warunek a<b, c) sumę elementów, których indeksy należą do zadanego przedziału indeksów [ind1,ind2], indeksy należy wczytać z klawiatury z zabezpieczeniem formatu i spełniające warunki ind1 ≥ 0, ind 2 ≥ 0 i ind1 ≤ 7, ind 2 ≤ 7 . 5. Wczytać 5-elementową liczb typu double , następnie zamienić w niej elementy o zadanych indeksach, wartości indeksów zainicjalizować, wydrukować tablicę przed zamianą elementów i po zamianie. 6. Napisać program znajdujący we wczytanej tablicy liczb typu int wartości minimalną i maksymalną. 7. Napisać program odwracający kolejność elementów w tablicy. 8. Napisać program przesuwający cyklicznie w prawo o zadaną liczbę pozycji ( przesunięcie takie oznacza, że element o indeksie n-1 wchodzi na pozycję o indeksie 0). Zadania domowe 1. Napisać program drukujący elementy, które się nie powtarzają. 2. Napisać program generujący 10000 liczb pseudolosowych z przedziału [0,50) i wyznaczający częstości wystąpień poszczególnych liczb. Podstawy programowania, sem.II Laboratorium nr 8 Typ znakowy 1. Wczytać znak przy użyciu każdej z funkcji scanf, getchar i getch, następnie wydrukować stosując funkcje printf, putc i putchar. 2. Napisać program drukujący tabelę kodów ASCII o kodach z przedziału [32-255]. 3. Wydrukować napis " W łańcuchu znaków mogą się znaleźć znaki drukowalne i kody sterujące" stosując kody oktalne polskich liter. 4. Napisać program wczytujący znak i realizujący klasyfikację znaku przy użyciu funkcji isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit. 5. Napisać program wczytujący literę małą i dużą i zamieniający odpowiednio na dużą i małą. 6. Napisać program wczytujący hasło 5-znakowe i podający informacje czy hasło jest prawidłowe, program powinien dopuszczać 3-krotne podanie hasła. 7. Napisać program przepisujący znaki z wejścia na wyjście, aż do podania znaku EOF. 8. Napisać program przepisujący z wejścia na wyjście tylko litery i cyfry, aż do podania znaku EOF. Litery należy zamieniać na duże. 9. Napisać program zliczający wiersze wejściowe ( wiersz- ciąg znaków zakończony '\n'). Podstawy programowania, sem.II Laboratorium nr 9 Funkcje cz. I 1.Napisać następujące funkcje: // nAdd - dodającą dwa argumenty typu int // nSubtract, - odejmującą dwa argumenty typu int // nMultiply, - obliczajacą iloczyn dwóch argumentów typu int //nDivide, - obliczajacą iloraz dwóch argumentów typu int //nResidue - obliczajacą resztę z dzielenia pierwszego argumentu // przez drugi. Defnicje funkcji umieścić po funkcji main(). Każdą z funkcji należy wywołać w main() dla dwóch par argumentów. 2. Napisać funkcję silnia i zastosować do obliczenia n k . 3. Napisać funkcję pierw3 obliczającą pierwiastek 3-go stopnia z liczby typu double. Uwzględnić, że funkcja pow nie może być użyta dla argumentów ujemnych. Zastosować funkcję dla obliczenia pierwiastków 3- stopnia z elementów zainicjowanej tablicy x[9]= {-2, -1.5, -1, -0.5, 0, 0.5,1, 1.5, 2}. Wyniki umieścić w tablicy y, następnie wydrukować tę tablicę. 4. Napisać program realizujący kalkulator czterodziałaniowy wykorzystujący funkcje z zadania 1. Program powinien umożliwiać wprowadzanie operandów typu double z zabezpieczeniem formatu oraz wybór rodzaju działania poprzez podanie symbolu ( '+'-dodawanie, '-' odejmowanie, '*' -mnożenie oraz ':' - dzielenie. Zakończenie działania programu - ESC (ASCII 27). Tylko te symbole powinny być akceptowane przez program. Gdy dane działanie nie jest wykonalne, powinien się pojawić odpowiedni komunikat. Podstawy programowania, sem.II Laboratorium nr 10 Tablice znakowe cz. I 1. Wczytać tablice znaków: tablicę s1[6] przy użyciu scanf, tablicę s2[8] przy użyciu gets, oraz s3[10] stosując fgets , następnie wydrukować poszczególne tablice stosując odpowiednio printf, puts i fputs . 2. Wczytać tablicę znakową 10-elementową, następnie wydrukować 3 pierwsze znaki i 3 ostatnie znaki tablicy, następnie skrócić łańcuch do 6 znaków, wydrukować długości łańcucha przed skróceniem i po skróceniu. 3. Zamienić wszystkie wystąpienia zadanego znaku w tablicy na inny zadany. 4. Zrealizować następujące kopiowania tablic znakowych: a) do tablicy znaków s4[5] skopiować tablicę znaków s5[5]="1234". b) do tablicy znaków s6[5] skopiować trzy ostatnie znaki z tablicy s7[8]="tekst". Wydrukować tablice s6 i s7. 5. Wczytać z klawiatury tablice znakowe nazwisko[10] i imie[10], następnie wykonać następujące działania. c) zamienić wszystkie litery w obu tablicach na małe d) utworzyć tablicę znakową będącą połączeniem obu łańcuchów rozdzielonych jedna spacją e) zmienić w każdej z tablic pierwszą literę na dużą i następnie utworzyć tablicę znakową będącą połączeniem obu tablic 6. Wczytać z klawiatury tablicę znaków lan1, następnie pojedynczy znak oraz tablicę znakową lan2 składającą się z trzech znaków. Sprawdzić przy użyciu funkcji czy zadany znak (funkcja strchr) i lan2 (funkcja strstr) występują w tablicy lan1. 7. Wczytać dwie tablice znaków i wydrukować je w kolejności alfabetycznej. 8. Zrealizować następujące konwersje tablica znaków/ liczba i liczba/ tablica znaków a) wczytać liczbę całkowitą w postaci tablicy znaków i zamienić na postać numeryczną ( funkcja atoi) b) wczytać liczbę rzeczywistą w postaci tablicy znaków i zamienić na postać numeryczną (funkcja atof) Zadania domowe. 1. Napisać program trim usuwający z tablicy znakowej spacje początkowe i spacje końcowe. 2. Napisać program wczytujący tablicę łańcuchów ( tablic znakowych) i posortować je alfabetycznie. 3. Napisać program usuwający komentarze z programu w języku ANSI C i zamieniający wszystkie białe znaki (poza wnętrzem tablic znakowych) na pojedyncze spacje. Podstawy programowania, sem.II Laboratorium nr 11 Funkcje cz. II 1. Napisać funkcje obliczające x n , n 2. Napisać program obliczający sumę x , log n x . ∑ n i =1 5 xi i! . Zastosować funkcję wczytującą tablicę jednowymiarową wczyt1D, funkcję obliczającą silnię, funkcję obliczającą pierwiastek 5-tego stopnia oraz funkcję suma obliczającą sumę. W funkcji main() wywołać funkcję wczyt1D oraz funkcję suma. 3. Napisać funkcję wczytującą tablicę jednowymiarową, funkcję drukującą tablicę jednowymiarową, funkcję przekazującą do funkcji wywołującej sumę elementów z wybranego zakresu indeksów oraz sumę wszystkich elementów tablicy. 4. Napisać funkcję wczytującą tablicę dwuwymiarową oraz funkcję drukującą tablicę dwuwymiarową. Zadanie domowe. 1. Napisać funkcję transpose transponującą macierz 3x3 oraz funkcję compute_row_col obliczającą sumę elementów wybranego wiersza i sumę elementów wybranej kolumny. 2. Napisać funkcję zamien_kol zmieniającą w macierzy miejscami dwie wybrane kolumny oraz funkcję zamien_wiersze zamieniającą dwa wybrane wiersze. 3. Napisać funkcję obliczającą wyznacznik macierzy 4x4 przy zastosowaniu funkcji obliczającej wyznacznik 3x3 metodą Sarrusa. Podstawy programowania, sem.II Laboratorium nr 12 Wskaźniki i dynamiczna alokacja pamięci w C, cz. I W ramach przygotowania teoretycznego należy wydrukować plik Wskazniki.pdf oraz strony 166-173 z WykladAnsiCbeztla.pdf. I. Część teoretyczna. 1. Wyjaśnić następujące pojęcia a) wskaźnik b) operator adresowy c) operator dereferencji II. Wyjaśnić następujące konstrukcje programowe związane ze wskaźnikami, opisy umieścić w sprawozdaniu z laboratorium. 1. int * px,*py;*pa, x=5,y=10, a[20]; 2. double * pd; 3. px=&x; 4. py=&y; 5. y=*px; 6. x=*py; 7. py=px; 8. *px=20; 9. *px=*py+5; Tablice i wskaźniki 10. pa=a; 11.*(pa+1)=10; 12. pa[2]=15; 13,pa++; 14. pa=pa-1; 15 *pa++=30; 16. *++pa=35; III Wyjaśnić pojęcia i konstrukcje programowe związane z dynamiczną alokacją pamięci, opisy umieścić w sprawozdaniu z laboratorium. 1. Alokacja pamięci na etapie kompilacji 2. Dynamiczna alokacja pamieci 3. Funkcje malloc, calloc, free. 4. int * px; 5. double *py; 6. px=(int) malloc( sizeof(int)); 7. py=calloc(5, sizeof(double)); 8. free(px); free(py); Zadanie1. Zdefiniować zmienne x typu int oraz y typu double i zmienne wskaźnikowe px typu wskaźnik do int oraz py typu wskaźnik do double. Wczytać z klawiatury wartości x i y przy użyciu wskaźników, następnie wydrukować bezpośrednio i przy użyciu wskaźników. Zadanie 2. Zdefiniować tablicę tab typu double oraz wskaźnik pa do typu double. Wczytać i wydrukować tablicę tab z użyciem pa. Zadanie 3. Napisać funkcję wymieniającą swoje argumenty typu int. Zadanie 4. Napisać program wyszukujący w tablicy liczb typu int wartości min i max przy użyciu wskaźnika. Zadanie 5. Utworzyć zmienne dynamiczne typu char, int i double, następnie wczytać i wydrukować. Zadanie 6. Alokować pamięć dla 10-elementowych tablic tab1 i tab2 liczb typu int, wczytać tablicę i posortować tab1 niemalejąco przy zastosowaniu algorytmu sortowania bąbelkowego oraz tab2 stosując algorytm prostego wybierania. Podstawy programowania, sem.II Laboratorium nr 13 Operatory bitowe w C/C++ Zadanie 1. Napisać program realizujący negację bitów liczby dodatniej x=6 typu char przy użyciu operatora '~ ' i drukujący otrzymany wynik. Następnie zrealizować sprawdzenie poprzez utworzenie 8-bitowej reprezentacji liczby x w kodzie U2 i zanegowanie jej bitów. Wykazać, że otrzymany ciąg bitowy reprezentuje liczbę -7 w 8-bitowym kodzie U2. char x=6,y; y=~x; printf("\n y=%d",y); getch(); Zadanie 2. Napisać program realizujący negację bitów liczby ujemnej x=-7 typu char przy użyciu operatora' ~ ' i drukujący otrzymany wynik. Zrealizować sprawdzenie: utworzyć 8-bitową reprezentację liczby -x w kodzie U2 i zanegować jej bity. Sprawdzić, czy otrzymany ciąg reprezentuje liczbę 6 w 8-bitowym kodzie U2. unsigned char x_=-7,y_; y_=~x_; printf("\n y_=%d",y_); getch(); Zadanie 3 Program realizujący konwersję liczby dziesiętnej na postać binarną. unsigned char liczba=15; int i,mask=1; printf("\n liczba=%d",liczba); int b[8]; for (i=0;i<8;i++) { if (liczba&mask) b[i]=1; else b[i]=0;// lub b[i]= liczba&mask?1:0; mask<<=1; // skrócony zapis instrukcji mask=mask<<2; } printf("\n"); for (i=7;i>=0;i--) printf(" %d ", b[i]); Zadanie 4 Napisać program tworzący maskę bitową zawierającą same zera poza wybranym k-tym bitem równym 1. Wydrukować maskę. unsigned char k=3,maska; maska=1<<k; // maska jest liczbą typu 2^ k. printf("\n maska z k-tym bitem rownym 1 = %d",maska); Zadanie 5 Napisać program tworzący maskę bitową zawierającą same jedynki poza wybranym k-tym bitem równym 1. Wydrukować maskę. maska=~(1<<k); // maska jest liczbą typu 2^8 - 2^k. printf("\n maska z k-tym bitem rownym 0 = %u",maska); Zadanie 6 Program wyznaczający wartość dziesiętną grupy n bitów w słowie 8-bitowym począwszy od pozycji p. int n=4,p; x=31; p=4; unsigned char w; w=x>>p+1-n &~(~0<<n); printf("\n Wartosc dziesietna grupy %d bitow od pozycji %d=%d",n,p,w); Zadanie 7 Program zmieniający wartość n-tego bitu liczby ( jeżeli bit równy 1 to zmiana na 0, a jeżeli 1 to zmiana na 0) x=31; n=4; w=x^(1<<n); printf("\n Wartosc liczby po zmianie bitu %d =%d",n,w); Zadanie 8 a) Ustawianie najstarszego bitu liczby na 1. x=15; w=x|1<<7; printf("\n Wartosc liczby %d po zmianie bitu x+128 =%d",x,w); b) Ustawianie najstarszego bitu liczby na 0. x=228; w=x&~(1<<7); printf("\n Wartosc liczby %d po zmianie bitu x-128 =%d",x,w); Podstawy programowania, sem.II Laboratorium nr 14 Pliki 1. Utworzyć plik liczby1.dat w katalogu bieżącym, następnie zapisać do pliku stosując funkcję fprintf liczbę typu int, typu float oraz typu double oddzielając poszczególne liczby spacjami. Odczytać plik przy użyciu fscanf . 2. Utworzyć tablicę wartości funkcji f ( x ) = 3 x odczytać plik. Zastosować fscanf i fprintf. dla x=0.0, 0.5,..., 9.5, zapisać do pliku i 3. Zdefiniować dwuwymiarową tablicę znaków wyniki[10][80], zapisać do poszczególnych wierszy w postaci łańcuchów znaków x i f(x). Tablicę zapisać do pliku przy zastosowaniu fputs, następnie odczytać stosując fgets. 4. Zapisać do pliku binarnego liczby2.dat pięć liczb typu int przy użyciu fwrite, odczytać stosując fread. 5. Napisać program obliczający sumę liczb w pliku liczby2.dat. 6. Zamienić w pliku miejscami dwa elementy ( fseek). 7. Wykonać kopię pliku liczby2.dat w katalogu bieżącym, następnie przepisać liczby ujemne do pliku liczby3.dat. 8. Znaleźć maksymalny i minimalny element w pliku. 9. Przepisać plik 1 do pliku 2 w odwrotnej kolejności elementów. 10. Posortować plik liczb typu double niemalejąco. Podstawy programowania, sem.II Laboratorium nr 15 Działania na strukturach 1. Zdefiniować typ strukturowy student o polach nazwisko (char [20]), imie (char[20]), rok_studiow(int), wydzial(char [20]). Zdefiniować dwie zmienne strukturowe typu student, student1 i student2, polom zmiennej student1 nadać wartości stosując instrukcje podstawienia i kopiowanie łańcuchów, dla zmiennej typu student2 pola wczytać z klawiatury. Wydrukować obie zmienne. 2. Zdefiniować tablicę struktur struktur studenci typu student, wczytać z klawiatury i wydrukować. 3. Zdefiniować typ zagnieżdżony pracownik o polach nazwisko (char [20]), imie (char[20]), staz_pracy (int), firmal(char [20]) i polu strukturowym typu adres ( ulica (char [20]), nr_domu (int), kod (char [8]), miasto (char [20]). Zdefiniować tablicę dwóch struktur typu pracownik, wczytać z klawiatury i wydrukować. 4. Zdefiniować wskaźnik do struktur typu student, alokować dynamicznie jedną strukturę, wczytać z klawiatury i wydrukować. Podstawy programowania, sem.II Laboratorium nr 16 Działania na strukturach i plikach 1. Wczytać z klawiatury zadaną tablicę zadanej liczby struktur typu student, zapisać do pliku studenci.dat, odczytać plik i wydrukować. 2. Napisać funkcję wyszukującą w pliku studenci.dat studenta o zadanym nazwisku. 3. Napisać funkcję sortującą plik studenci.dat alfabetycznie według pola nazwisko. 4. Dany jest plik studenci.dat zawierający dane pewnej liczby studentów, przepisać do osobnych plików dane studentów wg roku studiów. Wydrukować poszczególne pliki.