автор: Димитър Димитров

Условие:
Дадени са четири редици от произволни цели числа. Максималният брой 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.: 5470

1200, 568, 2, 8000, 33333, 477
33333, 8000, 1200, 568, 477, 2
1200
Sredno aritm.: 7263.33
Sredno aritm.: 1200

10458, 6891, 778, 22222, 368, 189, 60
22222, 10458, 6891, 778, 368, 189, 60
6891
Sredno aritm.: 5852.29
Sredno aritm.: 6891

97, 19, 7560, 6200, 5470
7560, 6200, 5470, 97, 19
7560, 5470
Sredno aritm.: 3869.2
Sredno aritm.: 6515

Подобни статии

  • Полиморфизъм в MS Visual C++
    Първи вид: Полиморфизъм по отношение на структурата/формата/ “чист полиморфизъм” представлява способността на обекти (представители на различни типове) да отговарят на едни и същи съобщения позволява обекти с различна структура/поведение да се управляват по единен начин (могат да реагират...
  • Основни положения при програмиране на ММ с CPU
    Работата на машини с CPU се управлява по предварително съставена програма, наречена управляваща програма (УП). Тя дава необходимата информация за обработване на даден детайл. Програмиране се нарича процесът на създаване на УП. То може да бъде ръчно или автоматизирано с помощта на компютър. Съвременн...
  • Основи на Информационните Технологии. Въпроси и отговори
    Какво се губи при дискретизиране на информация и защо? При променяне на вида на файла или неговата компресия се получава дискретизиране на информацията и се губи част от информацията. Кои основни информационни дейности не могат да се извършат чрез компютър? Всичките четири основни информационни д...