Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

Delphi To TP   Найти похожие ветки 

 
{RASkov} ©   (2007-12-10 19:43) [0]

"Переведите" вот этот код с Делфи на Турбо Паскаль пожалуйста:
program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils;

var N: Integer;
begin
 Write("Введите длину ребра куба: ");
 ReadLn(N);
 Writeln("Площадь грани ="+IntToStr(N*N));
 Writeln("Вся площадь ="+IntToStr(N*N*6));
 Writeln("Объем ="+IntToStr(N*N*N));
 Readln;
end.


Попросила одна девулька(соседка) помочь с контрольным заданием, там нужно на ТП.... А я и не знаю как там в ТП....

Подозрения вот на эти строки
{$APPTYPE CONSOLE}

uses
 SysUtils;


и соответственно IntToStr...
Так же подозреваю, будет выглядеть вот так:
program Project1;

uses ???;

var N: Integer;
begin
 Write("Введите длину ребра куба: ");
 ReadLn(N);
 Writeln("Площадь грани ="+N*N);
 Writeln("Вся площадь ="+N*N*6);
 Writeln("Объем ="+N*N*N);
 Readln;
end.

Верно ли? И что там в юзас нужно? Спасибо)


 
@!!ex ©   (2007-12-10 19:46) [1]

program Project1;
uses CRT; //помойму без него readln Не работает. хотя могу ошибаться.
var N: Integer;
begin
Write("Введите длину ребра куба: ");
ReadLn(N);
Writeln("Площадь грани =",N*N);
Writeln("Вся площадь =",N*N*6);
Writeln("Объем =",N*N*N);
Readln;
end.


 
@!!ex ©   (2007-12-10 19:48) [2]

И вообще, вот этот код, не правильно написан.
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var N: Integer;
begin
Write("Введите длину ребра куба: ");
ReadLn(N);
Writeln("Площадь грани ="+IntToStr(N*N));
Writeln("Вся площадь ="+IntToStr(N*N*6));
Writeln("Объем ="+IntToStr(N*N*N));
Readln;
end.


IntToStr Нафиг не нужен. Write спокойно выводит числа, тупо через запятую, перевод в строку - лишняя операция, как и сложение строк.


 
БарЛог ©   (2007-12-10 19:49) [3]

> program Project1;
не обязательно

> uses CRT; //помойму без него readln Не работает. хотя могу ошибаться.
да


 
{RASkov} ©   (2007-12-10 19:56) [4]

Спасибо. Значит в [1] - это самое то...


 
Amoeba ©   (2007-12-10 22:16) [5]

CRT не нужен.


 
Германн ©   (2007-12-10 22:25) [6]


> {RASkov} ©   (10.12.07 19:56) [4]

Так будет красивше:
program Project1;

uses Crt;

var N: Integer;
begin
 repeat
   Write("Введите длину ребра куба: ");
   ReadLn(N);
   Writeln("Площадь грани =",N*N);
   Writeln("Вся площадь =",N*N*6);
   Writeln("Объем =",N*N*N);
   Writeln("Продолжить "Y" Выйти из программы "N");
 until UpCase(ReadKey) =  "N";
end.


 
{RASkov} ©   (2007-12-10 22:51) [7]

> [6] Германн ©   (10.12.07 22:25)

;)
У меня ТП нет, а в делфи такое не проверишь, но я вижу нововведение в код, и понимаю его смыл :) Спасибо)

>
ПЫСЫ Я вот другие задачи по контрольному заданию смотрю..... о ужас.... зачем я согласился помагать :(


 
Alex Konshin ©   (2007-12-10 22:55) [8]

> {RASkov} ©   (10.12.07 22:51) [7]
> зачем я согласился помагать :(

Мы догадываемся, но никому не скажем :)


 
AlexKniga ©   (2007-12-10 22:56) [9]

> uses Crt;
Лишнее.


 
{RASkov} ©   (2007-12-10 23:03) [10]

> [8] Alex Konshin ©   (10.12.07 22:55)

:)


 
{RASkov} ©   (2007-12-10 23:09) [11]

> [5] Amoeba ©   (10.12.07 22:16)

> [9] AlexKniga ©   (10.12.07 22:56)

Это понятно, а вот для такой строки:
sqrt(sqr(x1 - x2) + sqr(y1 - y2))
т.е. sqrt, sqr и еще pi - есть в ТП и необходим ли какой доп модуль в юзас?


 
Юрий Зотов ©   (2007-12-10 23:14) [12]

"sqrt, sqr и еще pi" - все есть и все встроенное.


 
{RASkov} ©   (2007-12-10 23:14) [13]

> [12] Юрий Зотов ©   (10.12.07 23:14)

Спасибо


 
Германн ©   (2007-12-11 00:37) [14]


> AlexKniga ©   (10.12.07 22:56) [9]
>
> > uses Crt;
> Лишнее.
>

В моем варианте оно отнюдь не лишнее.


> {RASkov} ©   (10.12.07 22:51) [7]
>
> > [6] Германн ©   (10.12.07 22:25)
>
> ;)
> У меня ТП нет, а в делфи такое не проверишь, но я вижу нововведение
> в код, и понимаю его смыл :) Спасибо)
>

Токмо сейчас (в спокойной обстановке) я бы чуть-чуть изменил бы код:
   Writeln("Продолжить - любая клавиша, Выйти из программы "ESC");
until ReadKey =  #27;


 
Германн ©   (2007-12-11 01:19) [15]


> БарЛог ©   (10.12.07 19:49) [3]
>
> > program Project1;
> не обязательно
>

Эт точно, но некрасиво.

> > uses CRT; //помойму без него readln Не работает. хотя
> могу ошибаться.
> да
>

Нет. Read (ReadLn), Write (WriteLn) не нуждаются и никогда не нуждались в указании чего-либо в uses. Все они "встроены" в компилятор.


 
Anatoly Podgoretsky ©   (2007-12-11 08:52) [16]

> Германн  (11.12.2007 00:37:14)  [14]

> > uses Crt;
> Лишнее.
>

> В моем варианте оно отнюдь не лишнее.

Это что бы помучался?


 
AlexKniga ©   (2007-12-11 09:05) [17]


> Все они "встроены" в компилятор.

:lol:
В TURBO.TPL лежат модули System и некоторые другие.


 
Германн ©   (2007-12-11 09:20) [18]


> Anatoly Podgoretsky ©   (11.12.07 08:52) [16]

Не. Это чтобы не было мучительно больно.


 
Германн ©   (2007-12-11 09:23) [19]


> AlexKniga ©   (11.12.07 09:05) [17]
>
>
> > Все они "встроены" в компилятор.
>
> :lol:
> В TURBO.TPL лежат модули System и некоторые другие.
>

Лежат. Ну и что?


 
Германн ©   (2007-12-11 09:43) [20]


> AlexKniga ©   (11.12.07 09:05) [17]

В догонку. Может ты подскажешь как в Паскале описать процедуру с произвольным количеством параметров? Да еще и если эти параметры произвольного типа?


 
AlexKniga ©   (2007-12-11 10:32) [21]

> Германн ©   (11.12.07 09:43) [20]
Обычными параметрами передаешь количество и размеры. На asm вручную вдавливаешь в стек перед вызовом и в самой функции выгребаешь из стека. Примерно так, сам не пробовал.


 
@!!ex ©   (2007-12-11 10:34) [22]

> [21] AlexKniga ©   (11.12.07 10:32)

Да не об этом речь.
А о том, что реализовать функционал write/read на паскале невозможно. Эти процедуры нигде не описаны, они вшиты в компилятор.


 
korneley ©   (2007-12-11 10:47) [23]


> Германн ©   (11.12.07 09:43) [20]
> как в Паскале описать процедуру с произвольным
> количеством параметров? Да еще и если эти параметры произвольного
> типа?
Насколько я помню - никак :( Я пользовал нетепизированые параметры, что-нибудь типа procedure MyProc(var par); и в локальных переменных процедуры var что-то : какого-то типа absolute par


 
Palladin ©   (2007-12-11 11:09) [24]


> Германн ©   (11.12.07 09:43) [20]

:)
очень просто

Procedure proc(SsylkaNaKuchuParametrovProisvolnogoTipa:Pointer);


 
korneley ©   (2007-12-11 11:22) [25]


> Palladin ©   (11.12.07 11:09) [24]
Ну это вообще универсально. И чревато. Особенно в "умелых" руках ;-)


 
korneley ©   (2007-12-11 11:26) [26]


> А о том, что реализовать функционал write/read на паскале
> невозможно. Эти процедуры нигде не описаны, они вшиты в
> компилятор.
К тому же нереентерабельны. Попробуйте в обработчике, скажем, 8-го прерывания их использовать... :)))


 
oldman ©   (2007-12-11 11:38) [27]


> {RASkov} ©   (10.12.07 19:43)  


Тебе еще повезло...
Меня попросили помочь - написать маленькую программку и нарисовать блок схему.
Сделал.

оказалось - надо на QBasik :(((
Вот уж попереводишь, так попереводишь...


 
{RASkov} ©   (2007-12-11 15:00) [28]

> [27] oldman ©   (11.12.07 11:38)
> оказалось - надо на QBasik :(((

Изначально был выбор - QBasic или Turbo Pascal
Я услышав про Паскаль, согласился :)
Но теперь, когда посмотрел задания, там математика сплошная..... т.е. есть дано: длина окружности(readln(N)), нужно посчитать ее площадь и вывести на экран(writeln(<тыры-пыры колдовство над(N)>))
Это самое простое наверное задание :)
Код-то я напишу, а вот формулы, по которым расчеты идут, уже не спомню.... :(
Я решил с ней все это делать, пусть она "вспоминает" формулы, а я ей в код переведу....
Она не на программера учится, поэтому ей знание языка, как такового, и не нужно)

ЗЫ Но, если что, переводить не буду! :)


 
Vlad Oshin ©   (2007-12-11 15:37) [29]

ReadKey, кажется, требует crt..


 
@!!ex ©   (2007-12-11 16:15) [30]

> [29] Vlad Oshin ©   (11.12.07 15:37)

да


 
Германн ©   (2007-12-11 16:45) [31]


> @!!ex ©   (11.12.07 10:34) [22]

Именно. Хоть кто-то меня правильно понял.


 
AlexKniga ©   (2007-12-11 17:15) [32]

> @!!ex ©   (11.12.07 10:34) [22]
Write/Read НЕ вшиты в компилятор TPC.EXE! Они лежат в модуле System расположенном в файле TURBO.TPL


 
@!!ex ©   (2007-12-11 17:20) [33]

> [32] AlexKniga ©   (11.12.07 17:15)

да? тогда вы не могли бы ответить на вопрос заданный в [20]?


 
Германн ©   (2007-12-11 17:20) [34]


> AlexKniga ©   (11.12.07 17:15) [32]

А ты его хоть раз сам своими глазами видел?
А ты знаешь что собственно файл TURBO.TPL не нужен, что можно его и не использовать?


 
AlexKniga ©   (2007-12-12 13:48) [35]

> @!!ex ©   (11.12.07 17:20) [33]
См. AlexKniga ©   (11.12.07 10:32) [21]

> Германн ©   (11.12.07 17:20) [34]
> А ты знаешь что собственно файл TURBO.TPL не нужен, что можно его и не использовать?
Удали сей файл. Пересобири проект, перезапустив ИДЕ. Или, если умеешь, то из коммандной строки.


 
@!!ex ©   (2007-12-12 14:10) [36]

> См. AlexKniga ©   (11.12.07 10:32) [21]

вообщето при вызове Write количество параметров не предеается.
ПРиведите пожалуйста код, который бы работал на паскале и реализовывал такую же работу с параметрами, как и write/read.


 
ыы   (2007-12-12 14:45) [37]

Write("Площадь грани ", N*N) при компиляции на уровне complier magic преобразуется в последовательность WriteString("Площадь грани"); WriteInteger(N*N);
А процедур с переменным количеством параметров без compiler magic таки нету.


 
AlexKniga ©   (2007-12-12 15:54) [38]

> @!!ex ©   (12.12.07 14:10) [36]
То, что компилятор по особенному обрабатывает некоторые функции, еще не означает, что они встроены в компилятор.

У меня нет исходников System.pas из TP7, по этому я смотрю исходники System.pas в Delphi5. Реализация WriteLn написана полностью.
Хотя и наличиствует следующий комент:
{*******************************************************}
{                                                       }
{       Borland Delphi Runtime Library                  }
{       System Unit                                     }
{                                                       }
{       Copyright (C) 1988,99 Inprise Corporation       }
{                                                       }
{*******************************************************}

unit System; { Predefined constants, types, procedures, }
            { and functions (such as True, Integer, or }
            { Writeln) do not have actual declarations.}
            { Instead they are built into the compiler }
            { and are treated as if they were declared }
            { at the beginning of the System unit.     }


 
Германн ©   (2007-12-12 16:01) [39]


> Instead they are built into the compiler

Ну а я об чем говорил?
А в исходниках ТР7 вообще нет никакой явной реализации Writeln и подобных ей процедур. Могу дать эти исходники для проверки.

P.S. А насчет Turbo.tpl это я погорячился. Краем уха припомнил что прочие модули можно хранить либо в ней, либо отдельно.


 
Anatoly Podgoretsky ©   (2007-12-12 16:13) [40]

> AlexKniga  (12.12.2007 15:54:38)  [38]

Откуда ты нашел реализацию Writeln - это же compiler magic



Страницы: 1 2 вся ветка

Текущий архив: 2008.01.27;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.017 c
15-1198165729
Nucer
2007-12-20 18:48
2008.01.27
Бесплатная версия ZipTV


11-1183016834
LazyBob
2007-06-28 11:47
2008.01.27
работа с несколькими формами


3-1190350616
Mery
2007-09-21 08:56
2008.01.27
StartTransaction.


2-1198484538
Artem
2007-12-24 11:22
2008.01.27
TAnimate, gif не работает в CLX-приложениях


15-1198337868
Evgeniy
2007-12-22 18:37
2008.01.27
Что такое BigInt?