Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ как перевести код паскаля с си?

Автор: leahov 21.12.2006 16:01

есть код программы, как его можно перевести в Си?

Автор: volvo 21.12.2006 16:10

Руками... Показывай код, если он большой - то присоединяй в аттаче...

Автор: leahov 21.12.2006 18:39

вот, долго искал сканер

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


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: leahov 22.12.2006 15:22

вот набрал вручную, может так будет легче


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 22.12.2006 19:08

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

Вот лог работы программы:

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

Должно же быть немного другое, правда?

Автор: leahov 22.12.2006 19:32

volvo скажи пожалуйста каким должен быть результат? или я чего то не понял

Автор: volvo 22.12.2006 20:13

Должно быть 1.234500000000000E+002

Автор: leahov 22.12.2006 20:40

хммм, странно - вроде всё правильно, почему так выходит?

volvo там не в ord`е дело случайно?

Автор: мисс_граффити 22.12.2006 21:46

что-то в этой строке не то....

write (nul <= c) and (c <= nine) do

не так ли?

Автор: leahov 22.12.2006 21:56

не, там в этой строке и ещё в одном месте я перепутал - вместо write надо while писать, но всё равно неполучается

Автор: мисс_граффити 23.12.2006 0:38

так лучше?

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 25.12.2006 20:12

да мисс_граффити спасибо give_rose.gif , теперь помогите его перевести в код Си пожалуйста

Автор: мисс_граффити 25.12.2006 20:45

чистый си? или с++?

Автор: leahov 25.12.2006 21:10

чистый си

Автор: leahov 27.12.2006 13:21

ребят, завтра последний день сдачи, помогите перевести этот код, сделайте подарок на Новый год !help.gif

Автор: мисс_граффити 29.12.2006 2:10

могу на с++... только тебе от этого вряд ли легче будет...