IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Перевод кодов программ c Turbo Pascal на DElPHI 7, Возникают трудности
dron4ik
сообщение 20.06.2008 20:32
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Условие задачи
1.Новый интернет-провайдер предоставляет услугу доступа в интернет с посекундной тарификацией . Для подключения нужно купить карточку позволяющую пользоваться интернетом определенное количество секунд .
при этом компания предает карточки стоимостью 1,2,4,..., 2 в 30-ой степени рублей на а0, а2,..... а30 секунд соответственно.


Родители разрешили Пете пользоваться интернетом М секунд . Определите за какую наименьшую сумму он сможет купить карточки , которые позволяют ему пользоваться интернетом не менее М секунд. Естественно, что Петя может купить как карточки различного достоинтства, так и несколько карточек одного достоинтства.
ПОЯСНЕНИЕ
Если ai<2•ai-1, то можно вместо карточки стоимотью 2i купить 2 карточки меньшей стоимости. Заменяем ai лучшим вариантом.
Затем покупаем карточки на нужное время, на каждом шаге выбирая карточку (набор карточек) с большим временем, но не превосходящим времени, которое осталось набрать.
Посмотреть решение


Как перевести этот код с паскаля в делфи?
var

a:array[0..30] of int64;
p,m:int64;
i:integer;
begin
read(m);
for i:=0 to 30 do
read(a[i]);
for i:=1 to 30 do
if a[i-1]*2>a[i] then
a[i]:=a[i-1]*2;
p:=0;
for i:=30 downto 0 do
if m>=a[i] then
begin
m:=m-a[i];
p:=p+(1 shl i);
end;
if m>0 then inc(p);
writeln(p);
end.
Я его перевел посмотрите правильно ли ?
var

a:array[0..30] of int64;
p,m:int64;
i:integer;
Procedure TForm1.Button1Click(Sender;Tobject)
begin
m:=strtoint(Edit1.Text);
for i:=0 to 30 do
a[i]:=strtoint(StringGrid.Cells[i-1,0]; label1.caption:=' ';
for i:=1 to 30 do
if a[i-1]*2>a[i] then
a[i]:=a[i-1]*2;
p:=0;
for i:=30 downto 0 do
if m>=a[i] then
begin
m:=m-a[i];
p:=p+(1 shl i); <<<<<<<<<<========= что за shl i ????????????
end;
if m>0 then label1.Caption:=inttostr(p) + 'наименьшая сумма';

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
марат
сообщение 30.05.2014 18:37
Сообщение #2


Гость






[quote name='dron4ik' date='20.06.2008 20:32' post='124655']
Условие задачи
1.Новый интернет-провайдер предоставляет услугу доступа в интернет с посекундной тарификацией . Для подключения нужно купить карточку позволяющую пользоваться интернетом определенное количество секунд .
при этом компания предает карточки стоимостью 1,2,4,..., 2 в 30-ой степени рублей на а0, а2,..... а30 секунд соответственно.
Родители разрешили Пете пользоваться интернетом М секунд . Определите за какую наименьшую сумму он сможет купить карточки , которые позволяют ему пользоваться интернетом не менее М секунд. Естественно, что Петя может купить как карточки различного достоинтства, так и несколько карточек одного достоинтства.
ПОЯСНЕНИЕ
Если ai<2•ai-1, то можно вместо карточки стоимотью 2i купить 2 карточки меньшей стоимости. Заменяем ai лучшим вариантом.
Затем покупаем карточки на нужное время, на каждом шаге выбирая карточку (набор карточек) с большим временем, но не превосходящим времени, которое осталось набрать.
Посмотреть решение
Как перевести этот код с паскаля в делфи?
var

a:array[0..30] of int64;
p,m:int64;
i:integer;
begin
read(m);
for i:=0 to 30 do
read(a[i]);
for i:=1 to 30 do
if a[i-1]*2>a[i] then
a[i]:=a[i-1]*2;
p:=0;
for i:=30 downto 0 do
if m>=a[i] then
begin
m:=m-a[i];
p:=p+(1 shl i);
end;
if m>0 then inc(p);
writeln(p);
end.
Я его перевел посмотрите правильно ли ?
var

a:array[0..30] of int64;
p,m:int64;
i:integer;
Procedure TForm1.Button1Click(Sender;Tobject)
begin
m:=strtoint(Edit1.Text);
for i:=0 to 30 do
a[i]:=strtoint(StringGrid.Cells[i-1,0]; label1.caption:=' ';
for i:=1 to 30 do
if a[i-1]*2>a[i] then
a[i]:=a[i-1]*2;
p:=0;
for i:=30 downto 0 do
if m>=a[i] then
begin
m:=m-a[i];
p:=p+(1 shl i); <<<<<<<<<<========= что за shl i ????????????
end;
if m>0 then label1.Caption:=inttostr(p) + 'наименьшая сумма';

end.

[/quo

помогите мне перевес


uses crt;
var arr:array[1..50,1..50] of real;
b:array[1..50] of integer;
i,j,n:integer;
a:boolean;
begin
write('Введите порядок матрицы: ');
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
arr[i,j]:=(random(20)-10) / 1.13;
write(arr[i,j]2.gif2,' ');
end;
writeln();
end;
a:=false;
for i:=1 to n do
begin
for j:=1 to n do
if arr[i,j]<0 then a:=true;
if a=true then b[i]:=1
else b[i]:=0;
a:=false;
end;
for i:=1 to n do
write(b[i],' ');
end.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 31.10.2024 18:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"