Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на Pascal программу на С++ с минимальными изменениями в логике кода, функциях и т.д.
В процессе возникла проблема с адаптацией type mat = array [1..5, 1..5] of real; Ближайший аналог - typedef double mat[mm][mm]; , однако тогда возникают проблемы с передачей параметров в функцию.
Поэтому пришлось создавать класс с динамическим выделением памяти [обращаю на это внимание, не статический] и перегруженным оператором индексации.
1. var x:integer; y:real; begin write('Введите значение аргумента "X" : '); readln(x); y:=3*cos((5*x)); writeln('Значение функции "Y" = ',y); readln; end.
2. var x,b:integer; begin write('Введите количество молока, полученного за день, л : '); readln(x); write('Введите количество дней : '); readln(b); writeln('Количество молока, полученного за заданный промежуток времени = ',x*b); readln; end.
3. var a,b,c:integer; begin write('Введите двузначное число: '); readln(a); b:=a div 10; c:=a mod 10; writeln(b,#10,c); end.
4. var b:integer; a:longint; begin write('Введите целое число: '); readln(a); b:=a div 100 mod 100; writeln(b); readln; end.
5. var a,b:integer; begin write('Введите числа : '); readln(a,b); if a and b mod 2=0 then writeln(a+b); if a and b mod 2<>0 then writeln(a*b); readln; end. {Про последнее "Иначе", увеличьте все числа в пять раз и выведите результаты" не очень понялЕсли оба чётные - сумма, если оба - нечётные - то произведение. А если иначе, то число должно быть равно нулю. Смысл увеличивать его в пять раз?)}
Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на Pascal программу на С++ с минимальными изменениями в логике кода, функциях и т.д.
В процессе возникла проблема с адаптацией type mat = array [1..5, 1..5] of real; Ближайший аналог - typedef double mat[mm][mm]; , однако тогда возникают проблемы с передачей параметров в функцию.
Поэтому пришлось создавать класс с динамическим выделением памяти [обращаю на это внимание, не статический] и перегруженным оператором индексации.
#include <iostream>
const int mm = 5;
class mat
{
private:
double ** array;
public:
mat(): array(nullptr) {}
mat(double tmp[][mm])
{
array = new double *[mm];
for (auto i = 0; i < mm; i++)
{
array[i] = new double [mm];
}
for (auto i = 0; i < mm; i++)
{
for (auto j = 0; j < mm; j++)
{
array[i][j] = tmp[i][j];
}
}
}
~mat()
{
for (auto i = 0; i < mm; i++)
{
delete[] array[i];
}
delete[] array;
}
double * operator[] (const int i)
{
if (i < 0 || i >= mm)
{
throw std::runtime_error("Error! Invalid index!");
}
return array[i];
}
};
void pp1(mat& A, bool& p, int& imax, int& jmax)
{
imax = jmax = 0;
for (auto i = 0; i < mm; i++)
{
for (auto j = 0; j < mm; j++)
{
if (A[i][j] > A[imax][jmax])
{
imax = i;
jmax = j;
}
}
}
p = jmax > imax;
}
void pp2(mat& A)
{
double c;
for (auto i = 1; i < mm; i++)
{
for (auto j = 0; j < i; j++)
{
c = A[i][j];
A[i][j] = A[j][i];
A[j][i] = c;
}
}
}
void pp3(mat& A, int& imax, int& jmax, double& S)
{
S = 0;
for (auto i = 0; i < mm; i++)
{
S += A[i][jmax] + A[imax][i];
}
}
int main()
{
double S;
int imax, jmax;
bool p;
double A1[mm][mm] = { {9, 1, 1, 2, 3}, {4, 6, 7, 8, 4}, {5, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 2, 1, 1 } };
mat A(A1);
std::cout << "isxodnaya matriza" << std::endl;
for (auto i = 0; i < mm; i++)
{
for (auto j = 0; j < mm; j++)
{
std::cout << " " << A[i][j];
}
std::cout << std::endl;
}
pp1(A, p, imax, jmax);
std::cout << "MAX element: A[" << imax << "][" << jmax << "] = " << A[imax][jmax] << std::endl;
if (p)
{
pp2(A);
std::cout << "Transponirovannaya matrix" << std::endl;
for (auto i = 0; i < mm; i++)
{
for (auto j = 0; j < mm; j++)
{
std::cout << " " << A[i][j];
}
std::cout << std::endl;
}
}
else
{
pp3(A, imax, jmax, S);
std::cout << "Symma elementov s " << S << std::endl;
}
return 0;
}
var
x:integer;
y:real;
begin
write('Введите значение аргумента "X" : ');
readln(x);
y:=3*cos((5*x));
writeln('Значение функции "Y" = ',y);
readln;
end.
2.
var
x,b:integer;
begin
write('Введите количество молока, полученного за день, л : ');
readln(x);
write('Введите количество дней : ');
readln(b);
writeln('Количество молока, полученного за заданный промежуток времени = ',x*b);
readln;
end.
3.
var
a,b,c:integer;
begin
write('Введите двузначное число: ');
readln(a);
b:=a div 10;
c:=a mod 10;
writeln(b,#10,c);
end.
4.
var
b:integer;
a:longint;
begin
write('Введите целое число: ');
readln(a);
b:=a div 100 mod 100;
writeln(b);
readln;
end.
5.
var
a,b:integer;
begin
write('Введите числа : ');
readln(a,b);
if a and b mod 2=0 then
writeln(a+b);
if a and b mod 2<>0 then
writeln(a*b);
readln;
end.
{Про последнее "Иначе", увеличьте все числа в пять раз и выведите результаты" не очень понялЕсли оба чётные - сумма, если оба - нечётные - то произведение. А если иначе, то число должно быть равно нулю. Смысл увеличивать его в пять раз?)}