-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvariant4.cpp
119 lines (110 loc) · 4.08 KB
/
variant4.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
* Даден е двумерен масив A[N,M] където N,M са цели числа в интервала [3,5] и се въвеждат от клавиатурата.
* Да се състави програма, която въвежда елементите на масива и реализира следното:
* 1. Намира произведението от елементи на масива със стойност по-голяма от 4.56
* 2. Формира нов масив B, който съдържа елементите от масив A, които имат стойност равна на произведението от индексите им
* 3. Извежда на екрана променения масив в табличен вид
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() { //от тук започва главната функция на програмата
SetConsoleOutputCP(1251); //активира кирилицата в конзолата
int N, M; //създадохме променливи, в които ще вкараме бройката на редовете и стълбовете
/*
* с цикъл do-while ще следим дали въведеното числа за редове и стълбове влизат в интервала [3,5]
*/
do
{
printf("Въведете броят на редовете (цяло число в интевал [3,5]): ");
scanf("%d", &N); //въвеждаме стойност цяло число за N от конзолата след горния надпис
}while(N<3 || N>5);
do
{
printf("Въведете броят на стълбовете (цяло число в интевал [3,5]): ");
scanf("%d", &M); //въвеждаме стойност цяло число за N от конзолата след горния надпис
}while(M<3 || M>5);
/*
* while(N<3 || N>5); - така следим дали въведеното число не е
* по-малко или равно от 2 или по-голямо или равно от 6
* и ако е, ще ни кара да въвеждаме стойност наново, т.е. ще изпълнява цикъла докато
* не въведем число в интевала от 3 до 5
while(M<3 || M>5); - същото, но за броя на стълбовете M
*/
float A[N][M]; //двумерен масив, който има N на бр редове и M на бр стълбове
int counter=0; //в counter ще запазим колко са броя на елементите, отговарящо на точка 2 от задан.
printf("\nВъведете елементите на двумерния масив A:\n");
//следва цикъл в цикъл за обхождане и въвеждане на елементите на целия масив:
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
printf("A[%d][%d]= ", i, j); //изписва A[0][0]=, A[0][1]=, A[0][2]= и т.н.
scanf("%f", &A[i][j]); //въвеждаме стойност за елемент на масива от клавиатурата
if(A[i][j]==(i*j)) counter++; //когато има елемент отг. на т.2 добавяме 1 към counter
}
}
int i_m=0, j_m=0, multip=0, broi=0;
/*В i_m ще присвоим елемента индекса по ред на елемент, който е по-голям от 4,56
* В i_j ще присвоим елемента индекса по стълб на елемент, който е по-голям от 4,56
* В multip ще присвоим стойността на елемент, който е по-голям от 4.56
* В broi ще присвоим броя на елементите, които са по-големи от 4.56 и
* по-надолу ще направим проверка дали тези елементи са повече от 1, т.е. поне 2 за да има
* смисъл да правим умножение
*/
for(int i=0; i<N; i++) //обхождаме целия масив и търсим число по-голямо от 4.56
{
for(int j=0; j<M; j++)
{
if(A[i][j]>4.56)
{
i_m=i;
j_m=j;
multip=A[i][j];
broi++;
}
}
}
if(broi>1) //ако има поне 2 елемента със стойност по-голяма от 4.56 ще търсим произведения
{
for(int i=0; i<N; i++) //обхождаме целия масив за да направим умножението по точка 1
{
for(int j=0; j<M; j++)
{
if(A[i][j]>4.56)
{
if(i!=i_m && j!=j_m) /*дали индексите на елемента са различни от тези на
елемента, който намерихме горе, че е по-голем от 4,56
*/
{
multip*=A[i][j]; //правим умножението
}
}
}
}
}
else printf("\nНяма елемент със стойност по-голяма от 4,56\n");
float B[counter]; /*масив B, който има брой елементи, колкото са броя на елементите на А,
отговарящи на точка 2*/
int br=0; //ще служи за следенето на индексите на масив B
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
if(A[i][j]==(i*j))
{
B[br]=A[i][j];
br++;
}
}
}
printf("\nМасив B изглежда така:\n");
for(int i=0; i<counter; i++) //цикъл for за обхождане на масив B
{
printf("%f\t", B[i]); //принтване стойностите на елементите на масив B
}
printf("\n\n");
//Когато използваме \n в printf това означава нов ред след него.
system("pause"); //задържа конзоалта до натискането на клавиш (Press any key to continue . . .)
return 0; //връща стойност 0 от главната функция на програмата (просто добър навик за писане)
}