1. Napisac funckcje odwracajaca liste (ja tego nie pisalem i nie jestem pewien ze to dobrze jest)
list_revers(list &stara)
{
list *nowa;
for(link *current=stara; current != 0; current=current -> next)
nowa.add(current -> value);
return nowa;
}
2.Co wydrukuje kompilator
int a=5 , b=6;
int *z , *u;
z= &a ; u= &b; z=u;
cout<<z<<" "<<u;
cout<<*z<<" "<<*u;
odp. adres adres 6 6
3. dlaczego program jest zly gdy umiescimy w funkcji (x,2)
double power(int x, int n)
{
if(n==0) return 1;
if(n%2) return x*power(x*x , n/2)
return power (x*x , n\2)
}
dla power (x,2) bedzie wywolywac sie w nieskonczenosc
prawidlowa funkcja
double power(int x, int n)
{
if(n==0) return 1;
if(n%2==0) return power(x*x , n/2)
else return x*power (x*x , n\2)
}
4. Ile gwiazdek sie wydrukuje.
a. for(int i=0; i<5; i++)
for(int j=5; j>0; j--)
cout<<"*";
25 gwiazdek
b. for(int i=0; i<5; i++)
for(int j=0; j < i; j++)
cout<<"*";
10 gwiazdek
c. for(int i=12; i>0; i=i/2)
cout<<"*";
4 gwiazdki
d. for(int i=0; i<10; i++)
for(int j=0; j*j<10; j++)
cout<<"*";
40 gwiazdek
e. for(int i=21; i>0; i=i>>1)
for(int j=0; j<4; j++)
cout<<"*";
20 gwiazdek ( i=i>>1 oznacza ze i dzielimy przez 2 , i=i<<1 oznacza ze i mnozymy przez 2)
f. for(i=1,z=0; i<15; i++)
for(j=5; j>0; j--) z++;
z= 70
g. for(i=5; z=5; i ; i/2)
z<<=0;
z=5
h. for ( i=0, z=50; i<4; i++)
for ( j=0 ; j<i; j++) --z;
z= 44
i. z=0; i= 16;
while( i )
{
z+=i; i>>=1;
}
z= 31
6. podaj wartosc kazdej zmiennej zapisaenj w prawej czesci tabeli po wykonaniu programu. zakladamy ze zmienne sa calkowite zajmuja 4 bajty, zas zmienna m jest zapamietana pod adresem 0x3FFFDOO
int m=44; m=44
int *p = &m *p=44 ; p-adres
int &r= m; r=44; &r - adres
int n= (*p)++; n=44;
int *q = p -1; q-adres; *q- jakas liczba
r= *(--p)+1; r- jakas liczba
++*p; *q=jakas liczba; q=adres
7. Zdefiniuj kompletna klase Stack tworzaca srodowisko operpwania na stosie liczb calkowitych. Jako reprezentacje wlasicwego stosu przyjmij tablice.Definicja klasy powinna zawierac: konstrukor, destruktor, def. funkcji pop (odloz) , def. f. push (pobierz) sprawdzenie czy is Empty , isFull .
Nie mam definicji funkcji pop i push
class stack {
private:
int tablica[10];
int ile;
public:
int pop( )
int push( int )
bool isEmpty( ){
if (ile==0) return true;
else return false;
}
bool isFull ( ){
if(ile == 10) return true;
else return false;
}
stack ( ): ile=0
{
}
~stack( )
};
8. Co bedzie po podaniu na wejscie BAROKX
viod EchoA( ) {
char c; cin>>c;
if( c !='x') { cout<<c;
EchoA( )}
}
odp. BAROK
viod EchoB( ) {
char c; cin>>c;
if( c !='x') { EchoA( );
cout<<c;}
}
odp. KORAB
9. Co program wypisze na ekranie
int a=5;
cout<<((--a)--);
cout<<a;
odp. 4 3
int a = 5;
a=(++a+(a++)+8)
cout<<a;
odp. 21
10. Napisz funkcje ktora sumuje elementy na obrzezy macierzy
int Border (int A[ ] [ ], int wiersz, int kolumna) {
int s=0;
for(int i=0;i<kolumna;i++)
{
s=s+A[0][i] ;
s=s+A[wiersz-1][i];
};
for (int j=0;j<wiersz;j++)
{
s=s+A[j][0] ;
s=s+A[j][kolumna-1];
};
s=s-A[0][0]-A[wiersz-1][0]-A[0][kolumna-1]-A[wiersz-1][kolumna-1];
return s;
}
11. W wezlach kopca binarnego przechowywane sa int . Narysowac w formie drzewa strukture kopca jaki powstanie do poczatkowo pustego kopca (drzewa) liczb calkowitych w nastepujacej kolejnosci: 15,7,11,3,10,10,8,12,5
po wstawieniu
15
/ \
7 11
/ \ / \
3 10 10 8
/ \
12 5
po posortowaniu zgodnie z def. kopca
15
/ \
12 11
/ \ / \
10 7 10 8
/ \
3 5
12. Zakladajc ze uzycie inst. switch (a takze wyraznia warunkowego W ? T:F) nie jest dozwolone napisz w C++ fragment programu rownowazny poznizszej instrukcji.
switch (x){
case 10: y = 'a' ; break;
case 20:
case 30:y='b' ; break;
default: y='c' ;
}
To nie wiem czy jest dobrze bo nie wiem czy W? T:F mial na mysli instrukcje warunkowa if
if(x==10)
y='a';
else if ((x==20)||(x==30))
y='b';
else y='c';
13. Nowa lista w odwrotnej kolejnosci (to tez nie wiem czy dobrze jest...nie pisalem tego )
template <class T> list<T> *diverse(list<T> *aLista, list<T> *nowalista)
{
ITERATOR<T> iter (*aLista);
while( !iter)
{
nowalista -> add ( iter( ) );
++ iter;
}
return nowalista;
}
14. Podaj przyklady konstruktora kopiujacego ( o tym jest w symfonii w drugim tomie ...nie bede pisac )
15. Jednokierunkowe klasy ( list oraz link ). Wykorzystujac mechanizmy tych klas napisz konstruktor kopiujacy klasy list
Odp. template<class T> list < T > :: list ( const list <T> &source )
16. Podaj wartosci zmiennych a b c
viod Modifty ( int x , int &y , int &z )
{
z=y;
y=z;
z=x;
}
viod test( int a , int b , int c )
{
Modfity(a,b,c)
}
cout <<a <<b<<c;
jakie warotosci beda wydrukowane dla test(1,2,3)
odp. a=1, b=2, c=1
17.Podano def. funkcji Minimum. Co nalezy wstawic w miejsce value i statement aby f. znajdowala wartosc najmniejsza
int minumum ( int Vector[ ] ,int N ){
int final = value;
for(int k=N-1 ; k>=0; k--)
if(Vector[k]<final) statement
return final
odp value - Vector[ N-1] , statement - final = Vector[k]
18. Niech Couple bedzie klasa o nastepujaej definicji
class Couple{
public:
Couple(int A) : parA { }
Couple(int A, double B) : parA(A),parB(B){ };
viod Display ( ) {
cout<<"("<<parA <<" , "<<parB<<")\n";
}
private:
int parA ; double parB;
}
Ktore deklaracje sa poprawne
a. Couple C1 ( 4, 5.0)
b. Couple C2
c. Couple C3(3)
d. Couple C4 = {1, 2.0}
odp. a i c poprawne
19. Zdefinoiowane funkcje printstars. podaj wynik dla wywolania z paremetren 4
viod Printstars ( int k ) {
if ( k > 0 ) {
Printstars(k-1);
for(int j=1 ; j<=k; j=j+2) cout<<"*";
cout<<"\n";
}
odp. *
*
**
**
20. Wezly drzewa posz. bin. oraz f. na nich operujaca sa zdef. nastepujaco
class TreeNode { int dara; Treenode *left , *right)
int Mystery (TreeNode *T){
if( T -> left == NULL) return ( T -> data);
else return Mystery ( T -> left)
}
Co robi ta funkcja??
Odp. Znajduje najmniejszy element w drzewie
21. Petle for zamien na petle while
a.
for ( ; h>=0 ; )
music;
while(1) {
if(h<0) break;
music;
}
b.
for( ; ; h + = 3 )
music;
while( 1 ){
h+=3;
music;
}
22.Napisz def. f. shift ktora 31-bitowe slowo danych przesuwa cyklicznie o B bitow w lewo ( przesuniecie w kierunku pozycji bardziej znaczacej) np. dla B=3 slowa postaci
01111000000000000000000011110000 wynik jest nastepujacy 01000000000000000000011110000111 . Parametrami funkcji sa slowa danych oraz wartosc przesuniecia B . Nie uzywac petli .
int shift ( dword v , int B )
{
dword a = ( v>>(32-B));
dword b= (v<<B);
return a | b ;
}
23. Napisz f. ktora jako swoj argument przyjmuje wartosc int a zwraca odbicie lustrzane tej liczby np.1234 a zwraca 4321 .
int mirror (int n)
{
int x,y,z=0,rzad;
for (int i=10 ;i; i=i*10)
{
x=fmod(n,i);
if(x==n)
{
rzad=i/10;
break;
}
}
for (int i=1;i<100;i++)
{
y=fmod(n,10);
z=z+rzad*y;
n=n/10;
rzad=rzad/10;
if(rzad<1) break;
}
return z;
}
24. Opisac nastepujacy rysunek ( sorka za ten rysunek ;))))
_______ ______ _______ _______
| --- | ---------- >| --- | ---------- >| ----- |-------> | "z" |
|_______| | | | | | |
------------ --------------- --------------
ppp* pp* p*
char z;
char *ppp , pp, p ;
main ( ){
p = &z ;
pp= p;
ppp=pp;
}
25. Napisz funkcje traingular ktora jako wynik zwraca wartosc true jesli podana liczba jest trojkatna lub false w przeciwnym wypadku. Liczba n jest trojkatna jesli reprezentowane przez nia zetony mozna ulozyc w formie trojkata np. 1,3,6,10
1 dla n=6
1 1
1 1 1
bool traingular (int n ){
int suma = 0 ;
for ( int i = 1; ; i++ )
{
suma=suma + i ;
if(suma == n ) return true;
if(suma>n) return false;
}
}
26. Wezly drzewa zdefiniowane sa nastepujaco class TreeNode { int dara; Treenode *left , *right)
. Napisz funkcje rekurencyjna ktora zwraca sume wszytkich elementow drzewa i jaka jest zlozonosc obliczeniowa tego procesu.
odp. zloznosc obliczeniowa log n
s=0;
double tree_sum ( TreeNode *T ){
s= s + T -> data ;
if ( T -> left != NULL ) tree_sum (T-> left)
if(T->right !=NULL) tree_sum (T ->right)
return s;
}
27. A teraz funkcja rekurencyjna ktora drukuje elementy drzewa w dowolnej kolejnosci.
viod traverse ( TreeNode *T )
{
cout<<T -> data <<endl;
if ( T -> left != NULL ) traverse (T-> left)
if(T->right !=NULL) traverse (T ->right)
}
28. Ponizej podano def. f. Count ktora powinna udostepniac liczbe elementow umieszczonych w uporzadkowanej tablicy Vector i majacych wartosci mniejsze od zadanego progu limit . Rozmiar N tablicy podaje trzeci parametr. niestety w pewnych wywolaniach pojawia sie blad. Na czym on polega i jak go usunac.
int Count ( int Vector [ ] , int limit , int N ) {
int index = 0 ;
while (( Vector[ index] < limit) && (index < N )) index ++
return index;
}
Blad polega na tym ze jesli limit bedzie wiekszy niz najwiekszy element tablicy to funkcja zaindeksuje nieistniejacy element tablicy. Aby tego uniknac wystarczy przestawic warunki w petli while .
jesli f. jest uporzadkowana rosnaco....
int Count ( int Vector [ ] , int limit , int N ) {
int index = 0 ;
while ( (index < N) && ( Vector[ index] < limit) ) index ++
return index;
}
Jeszcze taka mala dygresja....bo nasz kochany Jurek troszke niejasno sprecyzowal zadanie i nie wiemy czy elementy sa uporzadkowane rosnaco czy malejaco....wiec ta funkcja bedzie uniwersalna.
int Count ( int Vector [ ] , int limit , int N ) {
int index = 0; int x = 0;
while (index < N)
if (Vector[index++] < limit) x++
return x;
}
29. Dziesietna liczba automorficzna to liczba calkowita ktora znajduje sie na koncu swego kwadratu
np. 5^2 = 25 , 25^2 = 625 . Napisz program ktory drukuje liczby automorficzne od 1 do 1000
for ( i = 1; i <=1000; i++ )
{
if ( i*i % 10 == i ) cout<<i;
if ( i*i % 100 == i ) cout<<i;
if ( i*i % 1000 == i ) cout<<i;
}
30. podano fragment definicji klasy rational umozliwiajacej operowanie na ulamkach wlasciwych
class rational {
int top , bottom ; //licznik i mianownik
public:
rational ( int , int );
.........................
}X,Y,Z ; X = Y + Z
Podaj nizbedne oprogramowanie, które gwarantuje poprawnosc instrukcji X=Y+Z.
rational operator+(rational Z) {
rational i(0,1);
i.top=Y.top*bottom + top*Y.bottom;
i.bottom = Y.bottom*bottom;
return i;
}
31. Napisz tresc funkcji void tree_sort (mode<T> *root) ktora drukuje w porzadku niemalejacym od najmniej. do najwiek. elementy drzewa poszukiwan binarncych.
viod tree_sort ( mo<T> *root)
{
if (root -> left !=NULL) tree_sort (root -> left);
else {
cout<<root -> data ;
if ( root ->right !=NULL) tree_sort (root -> right)
return;
}
cout<<root -> data;
if ( root ->right !=NULL) tree_sort(root ->right);
}
chyba dobrze ale glowy nie daje....
32. Wskaz bledny zapis
a. int test ( int x )
{
x=4;
return 5;
}
b. int test (int & x)
{
x=4;
return 5;
}
c. int test (const int &x){
x=4;
return 5;
}
Odp . zapis c jest bledny bo do przydomka const nie mozna nic przypisac.
co zostanie wydrukowane
int i = 1 ; j = 2 ;
i = test ( j );
cout<<"i:"<<i<<"j:"<<j
odp . dla funkcji a i=5 j = 2
dla funkcji b i=5 j=4
33. W jednokierunkowej liscie cyklicznej wskaznik ostatnim elemencie skazuje na pierwszy element listy. Wykorzystujac mechanizmy klas list oraz link napisz definicje funkcji (bez uzywania klasy interator), która jako element liste cykliczna (nie wskaznik) oraz zwraca jako wynik liczbe elementow tej listy
int funkcja ( list &stara){
list *lista = stara;
link *First, *wezel;
int suma = 0;
if ( lista -> First = = NULL) return 0;
wezel = First = lista -> First ;
suma ++ ;
for ( ; ; ){
if (wezel = wezel ->next != First ) suma++ ;
else break ;
}
return suma ;
}