• 1. Даден е едномерен масив А[N] ,  където N е естествено число, не по-голямо от 20. Да се формира и изведе нов масив B, който съдържа само положителните елементи от масива A. Реализирайте програмата чрез използване на функции и указатели.

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    
    void func(int *n,int *A)
    {
    	int *B,i;
    	int z=0;
    	B=(int *)malloc(*n);
    	for (i=0;i<*n;i++)
    		if (*(A+i)>0)
    		{
    			*(B+z)= *(A+i);
    			z++;
    		}
    	for (i=0;i<z;i++)
    		printf("Element %d, na adres %p ima stoinost: %d\n",i+1,B+i,*(B+i));
    }
    
    void main()
    {
    	int *A,i;
    	int n;
    	do
    	{
    		system("cls");
    		printf("Vuvedi n: ");
    		scanf("%d",&n);
    	} while (n<1 || n>20);
    	A=(int *)malloc(n);
    
    	for (i=0;i<n;i++)
    	{
    		printf("Vuvedi stoinost %d: ",i+1);
    		scanf("%d",A+i);
    	}
    
    	func(&n,A);
    }
    
    

    2. Даден е едномерен масив  A[N] ,  където N е естествено число, не по-голямо от 20. Да се формира и изведе нов масив B, който съдържа само отрицателните числа от масива A, по реда на тяхното срещане при обхождане на A от последния към първия елемент.

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    void func(int * n,int * A)
    
    {
    	int * B,i;
    	int z=0;
    	B=(int *)malloc(*n);
    	for (i=*n;i>0;i--)
    		if (*(A+i-1)<0)
    		{
    			*(B+z)= *(A+i-1);
    			z++;
    		}
    	for (i=0;i<z;i++)
    		printf("Element %d, na adres %p ima stoinost: %d\n",i+1,B+i,*(B+i));
    }
    
    void main()
    {
    	int * A,i;
    	int n;
    	do
    	{
    		system("cls");
    		printf("Vuvedi n: ");
    		scanf("%d",&n);
    	} while (n<1 || n>20);
    
    	A=(int *)malloc(n);
    	for (i=0;i<n;i++)
    	{
    		printf("Vuvedi stoinost %d: ",i+1);
    		scanf("%d",A+i);
    	}
    	func(&n,A);
    }
    

    3. Дадени са два подредени масива a[N] и b[N] , където N е естествено число, не по-голямо от 20. Да се обединят тези масиви в един нов масив, също подреден.

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    void sort(int * n,int * A)
    
    {
    	int temp,i,j;
    	for (i=0;i<2*(*n);i++)
    		for (j=0;j<2*(*n);j++)
    			if (*(A+j)>*(A+i))
    			{
    				temp=*(A+i);
    				*(A+i)=*(A+j);
    				*(A+j)=temp;
    			}
    }
    
    void input(int * A,int * B,int * n)
    {
    	int z=0,i;
    	for (i=0;i<*n;i++)
    	{
    		printf("Vuvedi za masiva A stoinost %d: ",i+1);
    		scanf("%d",A+i);
    	}
    	for (i=0;i<*n;i++)
    	{
    		printf("Vuvedi za masiva B stoinost %d: ",i+1);
    		scanf("%d",B+i);
    	}
    	for (i=*n;i<2*(*n);i++)
    	{
    		*(A+i)=*(B+z);
    		z++;
    	}
    }
    
    void main()
    {
    	int * A, * B, n, i;
    	do
    	{
    		system("cls");
    		printf("Vuvedi n: ");
    		scanf("%d",&n);
    	} while (n<1 || n>20);
    	A=(int *)malloc(2*n);
    	B=(int *)malloc(n);
    	input(A,B,&n);
    	sort(&n,A);
    	for (i=0;i<2*n;i++)
    		printf("%d\n",*(A+i));
    }
    
      4. Да се напише програма, която въвежда елементите на двумерен масив A[N][М] и отпечатва номера на реда, в който елементите от него образуват растяща редица.
    #include <stdio.h>
    #include <malloc.h>
    void stnnm(int * n,int * m)
    {
    	do
    	{
    		scanf("%d",n);
    	} while (*n<0 || *n>10);
    	do
    	{
    		scanf("%d",m);
    	} while (*m<0 || *m>10);
    }
    
    void stnA(int * A,int * n,int * m)
    {
    	int z=0,i,j;
    	for (i=0;i<*n;i++)
    		for (j=0;j<*m;j++)
    		{
    			printf("\nA[%d][%d]=",i+1,j+1);
    			scanf("%d",A+z);
    			z++;
    		}
    }
    
    void check(int * A,int * n,int * m)
    {
    	int z=0,flag=0,i,j;
    	for (i=0;i<*n;i++)
    	{
    		flag=0;
    		for (j=0;j<*m;j++)
    		{
    			if (j==0) {z++;continue;}
    			if (*(A+z) < *(A+z-1))
    			{
    				flag=1;
    				break;
    			}
    			z++;
    		}
    		if (flag==0) printf("\nRed %d e rastqsht!",i+1);
    		else printf("\nRed %d ne e rastqsht!",i+1);
    	}
    }
    
    void main()
    {
    	int n,m;
    	stnnm(&n,&m);
    	int * A=(int *)malloc((n*m)*sizeof(int));
    	stnA(A,&n,&m);
    	check(A,&n,&m);
    	free(A);
    }
    
      5. Да се напише програма, която въвежда елементите на двумерен масив A[N][М] и отпечатва номера на реда, в който елементите му са само положителни.
    #include <stdio.h>
    #include <malloc.h>
    void stnnm(int * n,int * m)
    {
    	do
    	{
    		scanf("%d",n);
    	} while (*n<0 || *n>10);
    	do
    	{
    		scanf("%d",m);
    	} while (*m<0 || *m>10);
    }
    
    void stnA(int * A,int * n,int * m)
    {
    	int i,j;
    	for (i=0;i<*n;i++)
    		for (j=0;j<*m;j++)
    		{
    			printf("\nA[%d][%d]=",i,j);
    			scanf("%d",A+i*j+j);
    		}
    }
    
    void check(int * A,int * n,int * m)
    {
    	int z,i,j;
    	for (i=0;i<*n;i++)
    	{
    		z=0;
    		for (j=0;j<*m;j++)
    			if (*(A+(i*j)+j)>0) z++;
    		if (z==j) printf("\nRed %d e polojitelen!",i);
    	}
    }
    
    void main()
    {
    	int n,m;
    	stnnm(&n,&m);
    	int * A=(int *)malloc(n*m*sizeof(int));
    	stnA(A,&n,&m);
    	check(A,&n,&m);
    }
    

    6. Да се дефинира тип структура ABONAT с полета: име (собствено и фамилно), абонатен номер, дължима сума за текущата година и дължима сума от предходни години. Да се дефинира масив USLUGA от структури, съдържащ информация за цяла група от абонати на услугата.

    Като се имат предвид описаните типове, да се състави функция, която пресмята общото задължение на даден абонат.

    Да се състави програма, която извежда на екрана името и общото задължение на всеки абонат.

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    typedef struct
    {
    	char ime[20];
    	char familia[20];
    	int nomer;
    	float sumnow;
    	float sumbefore;
    }ABONAT;
    
    void brabonati(int * n)
    {
    	do 
    	{
    		system("cls");
    		printf("Vuvedete broi abonati: ");
    		scanf("%d",n);
    	} while (*n<1);
    }
    
    void zapis_abonati(ABONAT *abonat, int n)
    {
    	int i;
    	for (i=0;i<n;i++)
    	{
    		system("cls");
    		printf("Zapis na abonat Nomer %d:\n",i+1);
    		printf("Ime na abonata: ");
    		scanf("%s",(abonat+i)->ime);
    		printf("Familia na abonata: ");
    		scanf("%s",(abonat+i)->familia);
    		printf("Abonaten nomer: ");
    		scanf("%d",&(abonat+i)->nomer);
    		printf("Duljima suma za tazi godina: ");
    		scanf("%f",&(abonat+i)->sumnow);
    		printf("Duljima suma za predni godini: ");
    		scanf("%f",&(abonat+i)->sumbefore);
    	}
    }
    
    void chetene_abonati(ABONAT * abonat,int n)
    {
    	system("cls");
    	printf("Ab. Nom.\tIme\t\tDuljima suma\n");
    	for (int i=0;i<n;i++)
    	{
    		printf("%d\t\t%s %s\t%f\n",(abonat+i)->nomer,(abonat+i)->ime,(abonat+i)->familia,((abonat+i)->sumnow + (abonat+i)->sumbefore));
    	}
    }
    
    int main()
    {
    	int n;
    	brabonati(&n);
    	ABONAT * usluga=(ABONAT *)malloc(n*sizeof(ABONAT));
    	zapis_abonati(usluga,n);
    	chetene_abonati(usluga,n);
    }
    
    

    7.Да се дефинира тип структура SLUJITEL с полета:  име (собствено и фамилно), длъжност, работната заплата по месеци за текущата година и годишен доход. Да се дефинира масив FIRMA от структури, съдържащи информация за  служители от фирма.

    Като се имат предвид описаните типове,  да се състави функция, която пресмята годишния доход на всеки служител.

    Да се състави програма, която извежда на екрана името и годишния доход на служител със годишна заплата над 50 000 лв.

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    typedef struct
    {
    	char ime[16];
    	char familia[16];
    	char dlujnost[20];
    	float zaplatames[12];
    	float zaplatagod;
    } SLUJITEL;
    
    void brsl(int * n)
    {
    	do 
    	{
    		
    		printf("Vuvedete broi slujiteli: ");
    		scanf("%d",n);
    	} while (*n<1);
    }
    
    void vhod(SLUJITEL * slujitel, int n)
    {
    	int i,j;
    	for (i=0;i<n;i++)
    	{
    		printf("Zapis na slujitel Nomer %d:\n",i+1);
    		printf("Ime na slujitelq:    ");
    		scanf("%s",(slujitel+i)->ime);
    		printf("Familia na slujitelq:    ");
    		scanf("%s",(slujitel+i)->familia);
    		printf("Dlujnost na slujitelq:    ");
    		scanf("%s",(slujitel+i)->dlujnost);
    		(slujitel+i)->zaplatagod=0;
    		for (j=0;j<12;j++)
    		{
    			do 
    			{
    				printf("Zaplata za mesec %d: ",j+1);
    				scanf("%f",&(slujitel+i)->zaplatames[j]);
    			} while ((slujitel+i)->zaplatames[j] < 0);
    			(slujitel+i)->zaplatagod+=(slujitel+i)->zaplatames[j];
    		}
    	}
    }
    
    izhod(SLUJITEL * slujitel,int n)
    {
    	int i;
    	printf("Ime\t\t\tDlujnost\t\tGodishen dohod\n");
    	for (i=0;i<n;i++)
    		if ((slujitel+i)->zaplatagod >= 50000) 
    			printf("%s %s\t\t%s\t\t%f\n",(slujitel+i)->ime,(slujitel+i)->familia,(slujitel+i)->dlujnost,(slujitel+i)->zaplatagod);
    }
    
    void main()
    {
    	int n;
    	brsl(&n);
    	SLUJITEL * firma=(SLUJITEL *)malloc(n*sizeof(SLUJITEL));
    	vhod(firma,n);
    	izhod(firma,n);
    }