автор: Димитър Димитров
Условие:
Дадени са четири редици от произволни цели числа. Максималният брой N на числата във всяка редица е различен, но стойността му е: 5≤N≤10. Напишете програма, с която:
- Да се определи броя на четните числа във всяка редица и определи в коя от тях той е най-малък;
- Да се подреждат в намаляващ ред числата в редиците;
- Да се покажат за сравнение всяка дадена и подредена редица;
- От всяка дадена редица числа да се формира нова, която да включва само четирицифрените числа с нечетни цифри в записа;
- Да се покажат за сравнения всяка дадена и формирана редица;
- Да се изчисли средноаритметичната стойност на числата във всяка редица – дадена и формирана.
Теоретична част:
Програмата работи по следния начин:
Нека М е константа за максимален брой елементи в редица и въвеждаме N (брой на числата) за всяка редица с условието 5≤N≤М. Ако N не отговаря на условието, програмата въвежда стойности на N, докато се окажат в посочените граници.
Началните 4 редици въвеждаме с 4 едномерни масива red1[M], red2[M], red3[M] и red4[M]. За да определим броя на четните числа във всяка редица и най-малката стойност от тях, записваме резултатите в масив c[4]. За четирицифрените числа в програмирането с нечетни цифри в записа, създаваме трети масив nc[4][M], който е двумерен.
След като сме въвели размерите на редиците, алгоритъма на програмата продължава. Програмата включва няколко основни цикъла.Първите 4 са цикли по четирите брояча N1, N2, N3, N4, с които си осигуряваме въвеждането на данни в четирите масива.
Когато сме въвели всички числа и четирите масива са пълни, започва алгоритъма, който проверява четните числа в съответната редица – ако числото е четно, увеличаваме съответния брояч от масива с. Накрая определяме минималната стойност от масива с (използваме функцията MinElement), за да получим отговора на тази част от задачата.
За извеждане на конкретна редица (масив) използваме функцията Izvejdane с 2 параметъра – редицата и броя на нейните елементи. За подреждането на конкретна редица използваме функцията Podredba (която прави сортировка чрез пряк избор), със същите параметри като функцията Izvejdane.
За определянето на 4-цифрените числа с нечетна цифра в записа използваме функцията Nechetna4Cifra, която определя дали в дадено число има нечетна цифра. Обхождайки чрез цикъл елементите на редиците, записваме в масива nc[4][M] числата, отговарящи на условието на задачата, като за целта използваме броячите br1, br2, br3 и br4. А за определяне средното аритметично на всяка редица използваме функцията SrednoAritm, която има същите аргументи като функциите Izvejdane и Podredba. Тя действа, като сумира всички елементи на дадената редица и разделя сумата на броя елементи.
Определяне средно аритметично на елементите на редица (използва за всяка от дадените и формираните редици)
#include <stdio.h>
const M = 10;
void Vavejdane(int mas[],int N) {
int i;
for(i=0; i < N; i++) {
printf(“Vavedete 4islo: “);
scanf(“%d”, &mas[i]);
}
}int MinElement(int c[], int m) {
int i,k,min;
min = c[0];
k = 0; //nomer na minimalniya element
for(i=1; i < m; i++) {
if(c[i] < min) {
min = c[i];
k = i;
}
}
return k;
}void Podredba(int c[],int m) {
int i,j,max,k;
for(i=0; i < m-1; i++) {
max = c[i]; k = i;
for(j=i+1; j < m; j++) {
if(c[j] > max) {
max = c[j];
k = j;
}
}
if(k != i) {
int x = c[i]; c[i] = c[k];
c[k] = x;
}
}
}void Izvejdane(int c[], int m) {
int i;
for(i=0; i < m; i++)
printf(“%d “, c[i]);
printf(“\n”);
}double SrednoAritm(int c[], int m) {
double sum = 0;
int i;
for(i=0; i < m; i++)
sum += c[i];
return sum/m;
}int Nechetna4Cifra(int n) {
int m = n, fl = 0, br = 0;
while(m > 0) {
int i = m%10;
if(i%2 == 1) fl = 1;
m /= 10;
br++;
}
if(br != 4) fl = 0;
return fl;
}void main() {
int red1[M],red2[M],red3[M],red4[M];
int N1,N2,N3,N4,i;//Vavejdane na N (5 <= N <= 10)
do {
printf(“Vavedete N1:”);
scanf(“%d”,&N1);
} while(N1 < 5 || N1 > M);
Vavejdane(red1,N1);
do {
printf(“Vavedete N2:”);
scanf(“%d”,&N2);
} while(N2 < 5 || N2 > M);
Vavejdane(red2,N2);
do {
printf(“Vavedete N3:”);
scanf(“%d”,&N3);
} while(N3 < 5 || N3 > M);
Vavejdane(red3,N3);
do {
printf(“Vavedete N4:”);
scanf(“%d”,&N4);
} while(N4 < 5 || N4 > M);
Vavejdane(red4,N4);int c[4]; //broy 4etni 4isla v redicite
c[0]=c[1]=c[2]=c[3]=0;
for(i=0; i < N1; i++)
if(red1[i]%2 == 0) //dali porednoto 4islo v redicata e 4etno
c[0]++;
for(i=0; i < N2; i++)
if(red2[i]%2 == 0)
c[1]++;
for(i=0; i < N3; i++)
if(red3[i]%2 == 0)
c[2]++;
for(i=0; i < N4; i++)
if(red4[i]%2 == 0)
c[3]++;
int min = MinElement(c,4);
printf(“Minimalen broy 4etni 4isla v %d-a redica\n”,min+1);
int nc[4][M]; //broy 4-cifreni chisla s nechetni cifri
int br1,br2,br3,br4;
br1 = br2 = br3 = br4 = 0;
for(i=0; i < N1; i++)
if(Nechetna4Cifra(red1[i]))
nc[0][br1++] = red1[i];
for(i=0; i < N2; i++)
if(Nechetna4Cifra(red2[i]))
nc[1][br2++] = red2[i];
for(i=0; i < N3; i++)
if(Nechetna4Cifra(red3[i]))
nc[2][br3++] = red3[i];
for(i=0; i < N4; i++)
if(Nechetna4Cifra(red4[i]))
nc[3][br4++] = red4[i];Izvejdane(red1,N1); Podredba(red1,N1);
Izvejdane(red1,N1); Izvejdane(nc[0],br1);
printf(“Sredno aritm.: %f\n”,SrednoAritm(red1,N1));
printf(“Sredno aritm.: %f\n”,SrednoAritm(nc[0],br1));
Izvejdane(red2,N2); Podredba(red2,N2);
Izvejdane(red2,N2); Izvejdane(nc[1],br2);
printf(“Sredno aritm.: %f\n”,SrednoAritm(red2,N2));
printf(“Sredno aritm.: %f\n”,SrednoAritm(nc[1],br2));
Izvejdane(red3,N3); Podredba(red3,N3);
Izvejdane(red3,N3); Izvejdane(nc[2],br3);
printf(“Sredno aritm.: %f\n”,SrednoAritm(red3,N3));
printf(“Sredno aritm.: %f\n”,SrednoAritm(nc[2],br3));
Izvejdane(red4,N4); Podredba(red4,N4);
Izvejdane(red4,N4); Izvejdane(nc[3],br4);
printf(“Sredno aritm.: %f\n”,SrednoAritm(red4,N4));
printf(“Sredno aritm.: %f\n”,SrednoAritm(nc[3],br4));
}Примерни резултати:
М=10
N1=5
Редица №1
Числа:
894, 819, 20756, 2000, 5470
N2=6
Редица №2
1200, 568, 2, 8000, 33333, 477
N3=7
Редица №3
10458, 6891, 778, 22222, 368, 189, 60
N4=5
Редица №4
97, 19, 7560, 6200, 5470Резултат:
Minimalen broy 4etni 4isla v 4-ta redica: 3
894, 819, 20756, 2000, 5470
20756, 5470, 2000, 894, 819
5470
Sredno aritm.: 5987.8
Sredno aritm.: 54701200, 568, 2, 8000, 33333, 477
33333, 8000, 1200, 568, 477, 2
1200
Sredno aritm.: 7263.33
Sredno aritm.: 120010458, 6891, 778, 22222, 368, 189, 60
22222, 10458, 6891, 778, 368, 189, 60
6891
Sredno aritm.: 5852.29
Sredno aritm.: 689197, 19, 7560, 6200, 5470
7560, 6200, 5470, 97, 19
7560, 5470
Sredno aritm.: 3869.2
Sredno aritm.: 6515
Pingback: Разпределени и мрежови операционни системи | Интернет информационно списание