Lista 6 -- Wstęp do informatyki, W. Hebisch

Zadanie 1

Wzorując się na podanych przykładach napisać program który:
  1. poprzedzi każdą linię jej długością (i dwukropkiem)
  2. na początku każdej linii dopisze ciąg znaków "-->" (dwa minusy i znak większości), a na końcu dopisze "<--" (znak mniejszości i dwa minusy)
  3. jak wyżej, ale wypisze tylko linie zaczynające się od spacji
  4. podzieli linie zastępując dwukropek znakiem nowej linii, a koniec linii pustą linią
  5. odwróci efekt poprzedniego programu (połączy linie, oddzielając części dwukropkami)
  6. zastąpi każdą linię pliku sumą występujących w niej liczb (zakładamy że plik składa się z liczb oddzielonych spacjami)
  7. podzieli linie zastępując przecinek znakiem nowej lini, lecz znaki poprzedzone przez '\' kopiujemy bez zmiany (razem ze '\', tzn '\,' nie spowoduje podzielenia linii). Koniec linii zastępujemy pustą linią.
  8. podzieli plik na słowa, tak by każde słowo było w oddzielnej linii.

Zadanie 2

Co robią poniższe funkcje (zakładamy że komputer jest 32-bitowy):
  1. unsigned int fun1(unsigned int arg)
    {
            arg = (arg<<16)|(arg>>16);
            return ((0xff00ff&arg)<<8)|((arg>>8)&0xff00ff);
    }
    
  2. unsigned int fun2(unsigned int arg)
    {
            arg = ((0xf0f0f0f&arg)<<4)|((arg>>4)&0xf0f0f0f);
            arg = ((0x33333333&arg)<<2)|((arg>>2)&0x33333333);
            return ((0x55555555&arg)<<1)|((arg>>1)&0x55555555);
    }
    
  3. unsigned int fun3(unsigned int arg)
    {
            arg = (arg<<16)|(arg>>16);
            arg = ((0xff00ff&arg)<<8)|((arg>>8)&0xff00ff);
            arg = ((0xf0f0f0f&arg)<<4)|((arg>>4)&0xf0f0f0f);
            arg = ((0x33333333&arg)<<2)|((arg>>2)&0x33333333);
            return ((0x55555555&arg)<<1)|((arg>>1)&0x55555555);
    }
    
  4. double fun4(double arg)
    {
    	if (arg>0) { 
    		return arg;
    	} else { 
    		retunr -arg;
    	}
    }
    
  5. unsigned int fun5(unsigned int a, unsigned int b)
    {
            unsigned int wynik=0;
            while(a>0) {
                    printf("%d, ", a);
                    if(a&1) {
                            wynik = wynik + b;
                    }
                    a = (a>>1);
                    b = b + b;
            }
            return wynik;
    }
    
  6. int fun6(int k, int a[], int n)
    {
            int wynik =0;
            int i;
            for(i=0; i<n; i++) {
                    if(k == a[i]) {
                            wynik = wynik + 1;
                    }
            }
            return wynik;
    }
    
  7. void fun7(int a[], int b[], int n)
    {
    	int i;
    	for(i=0; i<n; i++) {
    		a[i] = a[i] + b[i];
    	}
    }
    

Zadanie 3

Co wypiszą poniższe programy:
  1. #include <stdio.h>
    void fun(int a[])
    {
    	int tmp=a[0];
    	a[0] = a[1];
    	a[1] = tmp;
    }
    int main(void)
    {
    	int a[2]={5,2};
    	fun(a);
    	printf("%d\n", a[1]);
    	return 0;
    }
    
  2. #include <stdio.h>
    void fun(int a[])
    {
            int tmp=a[0];
            a[0] = a[1];
            a[1] = tmp;
    }
    int main(void)
    {
            int a[2]={5,2};
            fun(a);
            fun(a);
            printf("%d\n", a[0]);
            return 0;
    }
    
  3. #include <stdio.h>
    int fun(int a[])
    {
            int b;
            b=a[0]+a[1];
            return b;
    }
    int main(void)
    {
            int a[2]={5,2};
            int b = 3;
            fun(a);
            printf("%d\n", b);
            return 0;
    }
    
  4. #include <stdio.h>
    int fun(int a)
    {
            a = a + 5;
            return a;
    }
    int main(void)
    {
            int a=5;
            int b=fun(a);
            printf("a=%d, b=%d\n", a, b);
            return 0;
    }
    
  5. #include <stdio.h>
    int fun(int a)
    {
            a = a + 5;
            return a;
    }
    int main(void)
    {
            int a=5;
            a=fun(a);
            printf("%d\n", a);
            return 0;
    }