Перевести с паскаля на С - C (СИ) (77577)
Формулировка задачи:
Перевести данную програму, на Borland C (он же чистый С)
Или хотябы отдельные ее части такие как
uses crt;
var
st:string;
summ,temp:real;
i,j,k,c:integer;
begin
ClrScr; // чистим экран
write ('Введите двоичное число: ');
read(st);
for i:=1 to Length(st) do begin //идём от 1 до длинны строки
if st[i]='1' then
else
if st[i]='0' then //проверка. если элемент i строки равен 1 или 0 то c=5
else
c:=5;
end;
if c<>5 then begin //если с не равно 5-и то идём дальше
for i:=1 to Length(st) do begin //идём от 1 до длинны строки
val(st[i],j,k); //присваиваем j целочисленный эквивалент i-того элемента строки
c:=Length(st)-i; //считаем степень
temp:=j*(exp(c*ln(2))); //умножаем i-тый элемент строки на 2 в степени с
summ:=summ+temp;
if i=Length(st) then //вывод промежуточных действий
write ('(',j,'*2^',c,')=')
else
write ('(',j,'*2^',c,')+');
end;
write (summ);
end
else
end.for i:=1 to Length(st) do begin
Решение задачи: «Перевести с паскаля на С»
textual
Листинг программы
#include <stdio.h> //для ввода-вывода
#include <stdlib.h> //для функции system()
#include <string.h> //для работы со строками
#include <math.h> //для возведения в степень
int main()
{
char st[1000];
int c = 0;
int j;
int temp, summ = 0;
system("cls");//для винды. system("clear"); если linux
printf("Введите двоичное число: ");
scanf("%s", st);
for (int i = 0; i < strlen(st); i++)
{
if (st[i] != '1' && st[i] != '0') // не дословно, но смысл тот же (если символ не 0 и не 1)
{
c = 5;
}
}
if (c != 5)
{
for (int i = 1; i <= strlen(st); i++)
{
j = st[i - 1] - 48; //наверное если отдельная функция, но это тоже работает
c = strlen(st) - i;
temp = j * pow(2, c); //pow(2, c) - 2 в степени c
summ += temp;
if (i == strlen(st))
{
printf("(%d*2^%d)=", j, c);
}
else
{
printf("(%d*2^%d)+", j, c);
}
}
printf("%d", summ);
}
return 0;
}
Объяснение кода листинга программы
В этом коде происходит перевод двоичного числа, введенного пользователем, в десятичное. Вот список действий, которые происходят в коде:
- Включаются необходимые заголовочные файлы:
stdio.hдля работы с вводом-выводомstdlib.hдля функцииsystem()string.hдля работы со строкамиmath.hдля возведения в степень
- Создаются переменные:
char st[1000]- массив для хранения введенного числаint c = 0;- счетчик для подсчета количества цифр в числеint j;- временная переменная для хранения числового значения символаint temp, summ = 0;- переменные для промежуточных расчетов
- Выполняется команда очистки консоли:
system(cls);для Windowssystem(clear);для Linux
- Выводится запрос на ввод числа:
printf(Введите двоичное число:);
- Происходит цикл по всем символам введенного числа:
for (int i = 0; i < strlen(st); i++)
- Проверяется каждый символ на соответствие 0 или 1:
if (st[i] != '1' && st[i] != '0')
- Если символ не равен 0 или 1, счетчик c устанавливается в 5:
c = 5;
- Если все символы являются 0 или 1, выполняется основной цикл перевода числа:
if (c != 5)
- В основном цикле происходит перевод числа в десятичное:
for (int i = 1; i <= strlen(st); i++)
- Вычисляется числовое значение текущего символа:
j = st[i - 1] - 48;
- Устанавливается значение счетчика c для текущего символа:
c = strlen(st) - i;
- Вычисляется десятичное значение символа:
temp = j * pow(2, c);
- К сумме прибавляется полученное значение:
summ += temp;
- Выводится промежуточный результат:
if (i == strlen(st))
- В конце выводится итоговый результат:
printf(%d, summ);
- Функция main() возвращает 0, завершая работу программы:
return 0;