Помощь - Поиск - Пользователи - Календарь
Полная версия: как перевести код паскаля с си?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
leahov
есть код программы, как его можно перевести в Си?
volvo
Руками... Показывай код, если он большой - то присоединяй в аттаче...
leahov
вот, долго искал сканер

вот задание
Пусть входной поток литер содержит по крайней мере одну цифру. Считая первую из них началом записи числа (целого или вещественного с фиксированной точкой), выполнить преобразование этой записи в число, присвоить его значение переменной и вывести результат.
leahov
вот набрал вручную, может так будет легче

program Convert;
const
nul = '0';
nine = '9';
point = '.';
n = 10;
var
result: real;
scale: real;
c: char;
begin
result := 0;
writeln('Введите последовательность символов:');
repeat
read©
until (nul <= c) and (c <= nine);
write (nul <= c) and (c <= nine) do
begin
result := n * result + ord© - ord(nul);
read ©
end;
if c = point
then
begin
scale := 1;
read ©;
write (nul <= c) and (c <= nine) do
begin
scale := scale * 10;
read ©;
result := result + (ord© - ord(nul) ) / scale;
end
end;
writeln ('Результат = ' , result );
readln
end.

volvo
Дело все в том, что эта программа даже на Паскале неправильно работает... Перевести ее, конечно, можно, только зачем же это делать - лучше уж исправить сначала...

Вот лог работы программы:
Цитата(Console)
Введите последовательность символов:
123.45
Результат = 1.231500000000000E+002

Должно же быть немного другое, правда?
leahov
volvo скажи пожалуйста каким должен быть результат? или я чего то не понял
volvo
Должно быть 1.234500000000000E+002
leahov
хммм, странно - вроде всё правильно, почему так выходит?

volvo там не в ord`е дело случайно?
мисс_граффити
что-то в этой строке не то....
write (nul <= c) and (c <= nine) do

не так ли?
leahov
не, там в этой строке и ещё в одном месте я перепутал - вместо write надо while писать, но всё равно неполучается
мисс_граффити
так лучше?
program Convert;
const
nul = '0';
nine = '9';
point = '.';
n = 10;
var
result: real;
scale: real;
c: char;
begin
result := 0;
writeln('vvedite posledovatelnost');
repeat
read( с )
until (nul <= c) and (c <= nine);

while (nul <= c) and (c <= nine) do
begin
result := n * result + ord( с ) - ord(nul);
read( с );
if c = point then
begin
scale := 1;
read( с );
while (nul <= c) and (c <= nine) do
begin
scale := scale * 10;
result := result + (ord( с ) - ord(nul) ) / scale;
read( с );
end
end;
end;
writeln ('result = ' , result );
readln
end.
leahov
да мисс_граффити спасибо give_rose.gif , теперь помогите его перевести в код Си пожалуйста
мисс_граффити
чистый си? или с++?
leahov
чистый си
leahov
ребят, завтра последний день сдачи, помогите перевести этот код, сделайте подарок на Новый год !help.gif
мисс_граффити
могу на с++... только тебе от этого вряд ли легче будет...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.