Studium Stacjonarne I stopnia kier

Transkrypt

Studium Stacjonarne I stopnia kier
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
INFORMATYKA
Operatory bitowe w C/C++
// Materiał do ćwiczenia laboratoryjnego nr 2
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#pragma hdrstop
#pragma argsused
int main(int argc, char* argv[])
{
//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 zanegowac 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
// Program tworzący maskę bitową zawierającą same zera poza wybranym
// k-tym bitem równym 1.
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);
// Wydrukowac maskę w postaci bitowej.
// Zadanie 5
// Program tworzący maskę bitową zawierającą same jedynki poza wybranym
// k-tym bitem równym 1.
maska=~(1<<k); // maska jest liczbą typu 2^8 - 2^k.
printf("\n maska z k-tym bitem rownym 0 = %u",maska);
// Wydrukowac maskę w postaci bitowej.
// 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);
getch();
return 0;
}
//---------------------------------------------------------------------------
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
//Funkcje w C/C++, cz. I
// Materiał do ćwiczenia laboratoryjnego nr 3
// Zadanie 1
Napisać następujące funkcje:
// nAdd
- dodającą dwa argumenty typu int
// nSubtract,
- odejmujacą 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.
// Zadanie 2
⎛n⎞
Napisać funkcję silnia i zastosować do obliczenia ⎜⎜ ⎟⎟ .
⎝k ⎠
// Zadanie 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ę.
// Zadanie 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.
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
//Wskaźniki i dynamiczna alokacja pamięci w C, cz. I
// Materiał do ćwiczenia laboratoryjnego nr 4
W ramach przygotowania teoretyczngo 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.
Zadanie2.
Zdefiniować tablicę tab typu double oraz wskaźnik pa do typu .double. Wczytać i
wydrukować tablicę tab z użyciem pa.
Zadanie3.
Napisać program wyszukujący w tablicy liczb typu int wartości min i max przy użyciu
wskaźnika.
Zadanie4. Utworzyć zmienne dynamiczne typu char, int i double, następnie wczytać i
wydrukować.
Zadanie5. Alokować pamięć dla 10-elementowych tablic tab1 i tab2 liczb typu int, wczytać
tablicę i posortować tab1 niemalejac0 przy zastosowaniu algorytmu sortowania bąbelkowego
oraz tab2 stosując algorytm prostego wybierania.
Zagadnienia dodatkowe
Alokacja pamięci w C++.
W języku C++ do dynamicznej alokacji pamięci stosuje się operator new a do
dealokacji pamięci operator delete. Alokację zmiennych i tablic realizuje się w sposób
podany w programie:
# include <iostream.h>
int main ()
{
int *px;
double *ptab;
px= new int; // alokacja pamięci dla zmiennej
ptab=new double[5];// alokacja pamięci dla tablicy
*px=5;
cout<<" Wartosc zmiennej="<<*px<<endl;
for (int i=0;i <5;i++)
{cout<<" Podaj element["<<i<<"]=";
cin>>*ptab++;
cout<<endl;
fflush(stdin);
}
ptab-=5;// przesuniecie wskaźnika na początek alokowanego obszaru
for (int i=0;i<5;i++)
cout<<endl<<" Element["<<i<<"]="<<*ptab++;
ptab-=5;
delete px;
delete [ ]ptab;
cin. get();
return 0;
}
// Przykładowy wydruk działania programu
Wartosc zmiennej=5
Podaj element[0]=-1
Podaj element[1]=2
Podaj element[2]=4
Podaj element[3]=0
Podaj element[4]=-3
Element[0]=-1
Element[1]=2
Element[2]=4
Element[3]=0
Element[4]=-3
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
Funkcje cz. II
// Materiał do ćwiczenia laboratoryjnego nr 5
1. Napisać funkcje obliczające x n , n x , log n x .
2. Napisać funkcję wymieniajacą swoje argumenty typu int.
5 x
n
3. Napisać program obliczający sumę ∑i =1 i . Zastosować funkcję wczytującą
i!
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.
4. 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.
5. 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.
Jeden z wyników przekazać do funkcji wywołującej przez wskaźnik.
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,
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
Działania na znakach
Materiał do ćwiczenia laboratoryjnego nr 6
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. Wydrukować kody ASCII polskich liter.
3. Wydrukować napis " W łańcuchu znaków mogą się znaleźć znaki drukowalne i kody
sterujące" stosując kody oktalne polskich liter.
4. Zmodyfikować funkcję wczytywania tablicy jednowymiarowej liczb typu double tak,
aby była drukowana nazwa tablicowego parametru aktualnego.
5. 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.
6. Napisać program przepisujący znaki z wejścia na wyjście, aż do podania znaku EOF.
7. 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.
8. Napisać program zliczający wiersze wejściowe ( wiersz- ciąg znaków zakończony
'\n').
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
Działania na tablicach znaków (łańcuchach)
Materiał do ćwiczenia laboratoryjnego nr 7
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. 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.
3. Wczytać z klawiatury tablice znakowe nazwisko[10] i imie[10], następnie wykonać
następujące działania.
a) zamienić wszystkie litery w obu tablicach na małe
b) utworzyć tablicę znakową będącą połączeniem obu łańcuchów rozdzielonych
jedna spacją
c) zmienić w każdej z tablic pierwszą literę na dużą i następnie utworzyć tablicę
znakową będącą połączeniem obu tablic
4. 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.
5. Wczytać dwie tablice znaków i wydrukować je w kolejności alfabetycznej.
6. 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)
c) zamienić liczbę całkowitą na tablice znakowe dla trzech podstaw systemu
liczbowego b1=10, b2=2, b3=16
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
Działania na tablicach znaków (łańcuchach)
Materiał do ćwiczenia laboratoryjnego nr 8
1. Napisać następujące funkcje ( analogi funkcji standardowych) przy użyciu wskaźników
a) funkcję wyznaczającą długość tablicy znakowej
b) funkcję kopiującą tablicę znakową
c) funkcję realizującą konkatenację (sklejanie) tablic znakowych
d) funkcję porównującą tablice znakowe
2. Napisać funkcję trim usuwającą z tablicy znakowej spacje początkowe i spacje końcowe.
3. Napisać program wczytujący tablicę łańcuchów ( tablic znakowych) i posortować je
alfabetycznie.
Zadanie dodatkowe
4. 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.
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
//INFORMATYKA
Działania na plikach
Materiał do ćwiczenia laboratoryjnego nr 9
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.
Studium Stacjonarne I stopnia kier. AiR i Ea, sem.III.2008/2009
Działania na strukturach i plikach
Materiał do ćwiczenia laboratoryjnego nr 10
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ć.
5. Wczytać z klawiatury zadaną tablicę zadanej liczby struktur typu student, zapisać do pliku
studenci.dat, odczytać plik i wydrukować.
6. Napisać program wyszukujący w pliku studenci.dat studenta o zadanym nazwisku.
7. Posortować plik studenci.dat alfabetycznie według pola nazwisko.
8. 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.