Из паскаля превратить в Си - C (СИ)
Формулировка задачи:
Но перевести не в C++, в именно просто в Си, который имеет примерно такой вид:
А вот сама программа на паскале, которую нужно перевести в СИ:
#include "stdafx.h"
#include "stdlib.h"
#include <math.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <locale.h>
void main()
{
float x, y;
int otv;
setlocale(LC_ALL, "RUS");
while (true)
{
system("cls");
printf("Определить попадает ли точка в заштрихованную область");
printf("\n Введите x:");
scanf_s("%f", &x);
printf("\n Введите y:");
scanf_s("%f", &y);
if ((y >= -0.5*x - 1) && (y <= 0.5*x + 1) || (pow(x, 2) + pow(y, 2)<1) && (x>0))
printf("\n Точка попадает.");
else
printf("\n Точка не попадает.");
printf("\n Подолжить работу?(0/1)");
scanf_s("\n %d", &otv);
if (otv == 0) break;
}
_getch();
}Program p4;
uses crt;
const
n=3;
m=4;
type
matrica=array[1..n,1..m] of real;
var
B:matrica;
otv:char;
r1,r2,r,i,kol,x,j,k:integer;
Begin
while true do
begin
textbackground(1);
textcolor(10);
clrscr;
writeln('Сколько раз число с клавиатуры повторяется в матрице?');
while true do
begin
writeln('Введите размерность матрицы');
readln(r1);
readln(r2);
if(r1>=1)and(r1<=n)and (r2>=1)and(r2<=m)then break
end;
writeln('Введите элементы матрицы');
for i:=1 to r1 do
for j:=1 to r2 do
begin
write('B[',i,',',j,']=');
readln(B[i,j]);
end;
writeln(' ':15, 'Вывод массива:');
for i:=1 to r1 do
begin
for j:=1 to r2 do
write(b[i,j]:6);
writeln
end;
begin
for i:=1 to r1 do
for j:=1 to r2 do
begin
if B[i,j]<0 then B[i,j]:=sqr(B[i,j]);
if B[i,j]>0 then B[i,j]:=exp(3*ln(B[i,j]));
end;
writeln('Вывод нового массива, отрицательные в квадрат:');
for i:=1 to r1 do
for j:=1 to r2 do
writeln [B [i,j]];
write('Продолжить работу?(Y/N)');
readln(otv);
if(otv='N')or(otv='n')then break;
end
end
END.Решение задачи: «Из паскаля превратить в Си»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
const int n = 3, m = 4;
int main(void) {
setlocale(LC_ALL, "RUS");
float B[n][m];
int r1, r2, i, j;
char otv;
while (true)
{
while (true)
{
printf("\tВведите размерность матрицы");
scanf_s("%d", &r1);
scanf_s("%d", &r2);
if ((r1 >= 1) && (r1 <= n) && (r2 >= 1) && (r2 <= m))
break;
}
printf("\tВведите элементы матрицы\n");
for (i = 0; i < r1; i++)
for (j = 0; j < r2; j++)
{
printf("B[%d][%d]=", i, j);
scanf_s("%f", &B[i][j]);
}
printf("\tВывод матрицы\n");
for (i = 0; i < r1; i++)
{
for (j = 0; j < r2; j++)
printf("%f\t", B[i][j]);
printf("\n");
}
for (i = 0; i < r1; i++)
for (j = 0; j < r2; j++)
if (B[i][j] <= 0)
B[i][j] = B[i][j] * B[i][j];
else
B[i][j] = exp(3 * log(B[i][j]));
printf("\tВывод новой матрицы\n");
for (i = 0; i < r1; i++)
{
for (j = 0; j < r2; j++)
printf("%f\t", B[i][j]);
printf("\n");
}
printf("\tПродолжить работу? (Y/N) ");
scanf_s("%c", &otv);
scanf_s("%c", &otv);
if ((otv == 'N') || (otv == 'n'))
break;
}
system("pause");
return 0;
}
Объяснение кода листинга программы
- В начале кода объявлены константы n и m, которые определяют размерность матрицы. Значения этих констант можно изменять в процессе выполнения программы.
- Создается матрица B размером n на m.
- Вводится размерность матрицы с помощью функции scanf_s.
- Вводится элементы матрицы с помощью двух вложенных циклов и функции scanf_s.
- Выводится размерность матрицы.
- Выводится первая строка матрицы.
- Выводится вторая строка матрицы.
- ...
- Выводится последняя строка матрицы.
- Производится проверка каждого элемента матрицы на отрицательность.
- Если элемент отрицательный, то он заменяется на квадрат этого элемента.
- Если элемент положительный, то он заменяется на экспоненту этого элемента.
- Выводится новая матрица.
- Пользователю предлагается ввести символ для продолжения работы программы.
- Если пользователь вводит 'N' или 'n', то программа завершается.
- Если пользователь вводит любой другой символ, то программа продолжает работу.