Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программирование Turbo Pascal 7 и Delphi 7
PAUK-NET.RU - Бесплатный ADSL портал Чувашии > Компьютеры > Прикладное программирование
Страницы: 1, 2, 3, 4
DaviN
такой вопрос по делфи.. у самого уже мозги кипят думать не могу..
имеется два массива v[i], d[i] отсортированные по возрастанию, где v высота и d длина кирпича..
надо изобразить на форме или image эти кирпичи так чтобы один стоял на другом..
типа того что на картинке.. можо использовать rectangle или с помошью линий..
Amp
Нужно чтобы кирпичи образовывали пирамидку? Т.е. в порядке убывания ширины основания друг на друга ложились?

One moment - как определяется принадлежность v и d для некоторого кирпича, если массивы отсортированы?
XpoHuK
Цитата(DaviN @ Jun 7 2007, 15:32) *
такой вопрос по делфи.. у самого уже мозги кипят думать не могу..
имеется два массива v[i], d[i] отсортированные по возрастанию, где v высота и d длина кирпича..
надо изобразить на форме или image эти кирпичи так чтобы один стоял на другом..
типа того что на картинке.. можо использовать rectangle или с помошью линий..


Допустим v[3,5,7,8] (высота) d[9,1,4,2] (длина), значит первый кирпичь имеет размер 3х9, но после сортироски получится 3х1 - а это уже не соопветствут введенному.
Если посмотреть на твой рисунок то кирпичи у тебя стоят по убыванию длинны их основания. Если я все правильно понимаю, то можно просто находить во 2-ом массиве мах елемент и начиная с него , ссылаясть на соответствующий номер элемента , выстраивать эти кирпичи, в порядке убывания длинны.
Lady_Melamory
Здравствуйте. Вообщем написала на паскале.
Переделать, думаю, легко будет...

program kirpich;
uses crt, graph;
var c:array[1..3] of integer;
d:array[1..3] of integer;
i,y,cd,m:integer;
begin
readkey;
clrscr;
cd:=0; m:=0;
c[1]:=10;c[2]:=20;c[3]:=30;
d[1]:=15;d[2]:=25;d[3]:=35;
Initgraph(cd,m,'c:\bp\bgi');
y:=200;
For i:=3 downto 1 do
begin
y:=y-c[i];
rectangle(100,y,100+d[i],y+c[i]);
end;
readkey;
end.
Lady_Melamory
Это конечно если массивы уже отсортированы. Если же нет, то
просто сортируем любым методом. Если надо могу написать.
DaviN
Всем спасибо.. Подкинули идею, осилил сам.. smile.gif
выглядит вот так..
вобще условие было.. если кому интересно:
Цитата
Строители изготавливют N кирпичей. Каждый кирпич это параллелепипед с размерами (v, d, s). Необходимо узнать наибольшую высоту башни, которую можно построить из этих кирпичей, причем кирпичи можно ставить на любую грань, но так, чтобы основание нижнего кирпича (ширина и длина) было больше (не равно) основания верхнего.
Amp
А в задании что-то не говорится про то, что это надо рисовать ))
DaviN
Цитата(Amp @ Jun 15 2007, 20:53) *
А в задании что-то не говорится про то, что это надо рисовать ))

аха.. но препод сказал, что без картинок не понятно..не принял, пришлось рисовать..
APTEM(rus)
Мне нужно перехватить API-функцию "connect()".
Amp
Первое, что бросается в глаза - http://rsdn.ru/article/baseserv/IntercetionAPI.xml
На wasm-е еще материалы есть.
Rock
Нужно написать прогу на паскале. Условия: дана координатная плоскость, часть которой заштрихована. Эта часть ограничена тремя линиями:
окружность (x*x +y*y=1),
X<0,2
Y<0
Ввод - координаты точки X и Y, вывод - значение булевской переменной. Также необходимо включить в программу операторы вывода, контролирующие написать ничего лучше, чем
Код
program Lab1;
var
x,y :integer;
K:boolean;
begin
write ('Vvedite x u y 4erez probel');
readln (x, y);
if (x*x+y*y<1)
  then begin
   if (x<0)
   then begin
     if (y<0) then K:=true
  else K:=false
end;
   end;
     end.
Жму Alt+F9, у меня выходит сообщение, типа Press Ctrl+Break.. Очевидно, что записано все неправильно, исправьте, плииз!!!
Спасибо за ранее!!!
Amp
Так понимаю, проверить принадлежность точки заданной области?
Код
var x,y : real;
begin
    readln(x, y);
    if((x*x+y*y<=1) and (x<0.2) and (y<0)) then write('true') else write('false');
    readln;
end.
Daniilka
Цитата(Rock @ Sep 15 2007, 13:19) *
Нужно написать прогу на паскале. Условия: дана координатная плоскость, часть которой заштрихована. Эта часть ограничена тремя линиями:
окружность (x*x +y*y=1),
X<0,2
Y<0
Ввод - координаты точки X и Y, вывод - значение булевской переменной. Также необходимо включить в программу операторы вывода, контролирующие написать ничего лучше, чем
Код
program Lab1;
var
x,y :integer;
K:boolean;
begin
write ('Vvedite x u y 4erez probel');
readln (x, y);
if (x*x+y*y<1)
  then begin
   if (x<0)
   then begin
     if (y<0) then K:=true
  else K:=false
end;
   end;
     end.
Жму Alt+F9, у меня выходит сообщение, типа Press Ctrl+Break.. Очевидно, что записано все неправильно, исправьте, плииз!!!
Спасибо за ранее!!!


А ты Ctrl+F9 нажимать не пробовал?
Daniilka
И если не поставишь перед "end." нечто типа "readln;" как то сделано у Amp'a ... то попробуй еще потыкать Alt+F5 после выполнения программы.

В программе ошибок нет.
Amp
Первая ошибка программы - использование зачем-то целого типа.
Rock
Подскажите, почему при запуске программы или компиляции выходит следующее сообщение:

А как включить в программу операторы ввода, контролирующий порядок выполнения условных операторов, чтобы он выводил номер ветви алгоритма?
Amp, спасибо большое!! А можно ли написать эту же программу, но чтобы операторы решения содержали только одно условие (не использовать булевые операции OR, AND)?
Amp
Что представляет собой твой диск F?
Rock
Диск F у меня - виртуальный дисковод алкоголя, на который ничего не смонтировано, че паскаль от него хочет.. - хз.. может у того, у кого я паскаль скачал, на диске F чет было?
Daniilka
Потыкай меню. Там должен быть пункт Directopries. Возможно там у тебя прописаны ссылки на диск F.
Это пути к служебным модулям и т.п.
Daniilka
Цитата(Amp @ Sep 15 2007, 16:06) *
Первая ошибка программы - использование зачем-то целого типа.


Давай уж сразу напрямки: "Не выпедривайся, салага." Нечего нас разгильдяев жалеть. smile.gif

Код
program Lab1;
var
x,y :real;
K:boolean;
begin
k:=false;
write ('Vvedite x u y 4erez probel');
readln (x, y);
Write('1. Proverka x*x +y*y=1 : ')
if (x*x+y*y<1)
  then begin
   Writeln('true');                             //Resultat 1-ei proverki
   Write('2. Proverka x<0.2 : ');
   if (x<0.2)
   then begin
     Writeln('true');                           //Resultat 2-ei proverki
     Write('3. Proverka y<0 : ');
     if (y<0) then
         begin
         Writeln('true');                       //Resultat 3-ei proverki
         K:=true
         end
     else Writeln('false');                   //Resultat 3-ei proverki
   end
   else Writeln('false');                     //Resultat 2-ei proverki
  end
  else Writeln('false');                      //Resultat 1-ei proverki

Writeln(k);                                    // Itogovyi resultat

Readln;
end.


Если мне не изменяет память и внимательность.
Amp
Цитата(Daniilka @ Sep 15 2007, 18:20) *
Давай уж сразу напрямки: "Не выпедривайся, салага." Нечего нас разгильдяев жалеть. smile.gif

Симаков(а это лабы по его курсу) точно не пожалеет. Зачем писать все? Пусть человек сам посидит и повозится. Ему же больше пользы.
SiMM
Цитата(Daniilka @ Sep 15 2007, 15:51) *
В программе ошибок нет.
Отсутствие синтаксических ошибок не означает отсутствия ошибок вообще. Как минимум, значение k при определённых условиях было неопределено (например, если x*x+y*y >= 1, или x > 0).
Daniilka
Цитата(SiMM @ Sep 16 2007, 6:08) *
Отсутствие синтаксических ошибок не означает отсутствия ошибок вообще. Как минимум, значение k при определённых условиях было неопределено (например, если x*x+y*y >= 1, или x > 0).
пойду повешусь
Bjorndalen
Цитата(Rock @ Sep 15 2007, 17:15) *
А можно ли написать эту же программу, но чтобы операторы решения содержали только одно условие (не использовать булевые операции OR, AND)?
А ты думаешь, что это реально? По моему, по-любому нужен AND или OR, даже если работаешь с булевыми переменными
mix
Цитата(Bjorndalen @ Sep 17 2007, 20:43) *
А ты думаешь, что это реально? По моему, по-любому нужен AND или OR, даже если работаешь с булевыми переменными

Если это задачки с первого курса факультета ИВТ, специальности ПО, то не можно, а нужно, по заданию, сделать как с использованием булевых операций, так и без. Разумеется количество условных операторов будет меняться.
Bjorndalen
Цитата(mix @ Sep 19 2007, 19:47) *
Если это задачки с первого курса факультета ИВТ, специальности ПО, то не можно, а нужно, по заданию, сделать как с использованием булевых операций, так и без. Разумеется количество условных операторов будет меняться.

Может тогда скажешь непросвещённым умам, как это сделать, не используя OR и AND?
SiMM
Цитата(Bjorndalen @ Sep 20 2007, 18:34) *
Может тогда скажешь непросвещённым умам, как это сделать, не используя OR и AND?
Условиями smile.gif
A OR B
Код
if a then
  action;
else if b then
  action;
end;
A AND B
Код
if a then
  if b then
    action;
  end;
end;
Bjorndalen
Цитата(SiMM @ Sep 20 2007, 19:29) *
Условиями smile.gif
A OR B
Код
if a then
  action;
else if b then
  action;
end;
A AND B
Код
if a then
  if b then
    action;
  end;
end;

Но ведь в таком случае получится не один условный оператор, а несколько wink.gif А в условии задачи говорится, что нужен один условный оператор и без использования OR и AND
Amp
Цитата(Bjorndalen @ Sep 20 2007, 19:41) *
Но ведь в таком случае получится не один условный оператор, а несколько wink.gif А в условии задачи говорится, что нужен один условный оператор и без использования OR и AND

Про количество условных операторов сказано не было. Была фраза "одно условие". Т.е. автор пытался сказать, что надо по одному элементарному условию на условный оператор )
Bjorndalen
Цитата(Amp @ Sep 20 2007, 19:57) *
Про количество условных операторов сказано не было. Была фраза "одно условие". Т.е. автор пытался сказать, что надо по одному элементарному условию на условный оператор )

Что-то всё равно какая-то лажа получается, программа запускается, но выдаёт неправильные значения. Но в любом случае спасибо, не знал, что с if'ом можно так делать wink.gif
Bjorndalen
Народ, скажите пожалуйста, как с помощью Паскаля можно вычислить десятичный логарифм числа?
Amp
log10() из юнита math
Bjorndalen
Цитата(Amp @ Sep 22 2007, 16:58) *
log10() из юнита math

То есть нужно писать примерно так?
Код
Program ghkk;
uses math;
var...
Amp
Цитата(Bjorndalen @ Sep 22 2007, 18:10) *
То есть нужно писать примерно так?
Код
Program ghkk;
uses math;
var...

Да.
Bjorndalen
Цитата(Amp @ Sep 22 2007, 18:15) *
Да.

Пишет, что нет такого файла - MATH.TPU... Другие способы не знаете? Просто, даже если такой файл будет у меня дома, то в универе такой файл вряд ли есть...
Amp
Цитата(Bjorndalen @ Sep 22 2007, 18:30) *
Другие способы не знаете?

Разложить логарифм в ряд.
P.S. Тут мне говорят, что в турбо паскале нет модуля math )) Тогда считай логарифм по основанию 10 через любой другой, какой там есть.
Bjorndalen
Цитата(Amp @ Sep 22 2007, 18:35) *
Разложить логарифм в ряд.
P.S. Тут мне говорят, что в турбо паскале нет модуля math )) Тогда считай логарифм по основанию 10 через любой другой, какой там есть.

Спасибо, но вот насчёт ряда, как его раскладывать? В методичке разложены и синус, и косинус, и натуральный логарифм, а вот разложение десятичного нету...
xmm
Цитата(Bjorndalen @ Sep 22 2007, 18:46) *
натуральный логарифм...
Кста, есть встроенная функция Ln(X:real)... Дальше: вспоминаем школьную формулу перехода к другому основанию для логарифмов smile.gif . Применяем ее и получаем десятичный логарифм.
Amp
Логарифм по основанию 10 можно посчитать через натуральный логарифм. Математика, 10-ый класс.
Daniilka
Она самая.... что-то типа: ln(x)/ln(10)
Daniilka
Цитата(Bjorndalen @ Sep 20 2007, 19:41) *
Но ведь в таком случае получится не один условный оператор, а несколько wink.gif А в условии задачи говорится, что нужен один условный оператор и без использования OR и AND


Присвоить все в булинову переменную и уже ее без 'or' и 'and' пихнуть в IF.


ЗЫ: Вы вообще о чем, граждане?
Bjorndalen
есть такой вопрос. Программа работает правильно, значение находит верно, оно совпадает с бибилотечной функцией, но при больших значениях n происходит переполнение памяти, как можно облегчить программу, чтобы она работала так же правильно? Диапазон допустимых значений входных данных таков: 1<x<1, 1=<n<=9
Код
Program var3;
var slag,x, chisl, znam, arc, sum,bib : real;
      n, i, z : integer;
begin
writeln('vvedite X and N');
readln(x,n);
if (x>=1) or (x<=-1) or (x=0) then writeln('Ukazannoe znachenie nedopustimo')
else begin
bib:=0;
sum := 0;
for i := 1 to n do
begin
  arc := 0;
  znam := 1;
  slag := 0;
  z := 1;
  chisl:=x*i;
   repeat
    slag := (chisl * z) / znam;
    arc := arc + slag;
    chisl := chisl * x * x * i * i;
    znam := znam + 2;
    z := z * (-1);
   until (abs(slag/arc) < 1e-10);
  sum := sum + arc;
  bib:=bib+arctan(x*i);
end;
writeln('iskomaya summa ravna ',sum:0:11);
writeln('bibliotechnaya funkcia ',bib:0:11);
end;
readln;
end.
MadDog.er
Цитата(Bjorndalen @ Oct 7 2007, 17:48) *
есть такой вопрос. Программа работает правильно, значение находит верно, оно совпадает с бибилотечной функцией, но при больших значениях n происходит переполнение памяти, как можно облегчить программу, чтобы она работала так же правильно? Диапазон допустимых значений входных данных таков: 1<x<1, 1=<n<=9
Код
Program var3;
var slag,x, chisl, znam, arc, sum,bib : real;
      n, i, z : integer;
begin
writeln('vvedite X and N');
readln(x,n);
if (x>=1) or (x<=-1) or (x=0) then writeln('Ukazannoe znachenie nedopustimo')
else begin
bib:=0;
sum := 0;
for i := 1 to n do
begin
  arc := 0;
  znam := 1;
  slag := 0;
  z := 1;
  chisl:=x*i;
   repeat
    slag := (chisl * z) / znam;
    arc := arc + slag;
    chisl := chisl * x * x * i * i;
    znam := znam + 2;
    z := z * (-1);
   until (abs(slag/arc) < 1e-10);
  sum := sum + arc;
  bib:=bib+arctan(x*i);
end;
writeln('iskomaya summa ravna ',sum:0:11);
writeln('bibliotechnaya funkcia ',bib:0:11);
end;
readln;
end.

ну так а что ты хотел Real у нас диапазон от скольки до сколько?
/me думает такс гдето у мну была таблица со значениями типов
используй тип данных с большим диапозоном
Bjorndalen
Позвольте спросить, а какой? Чтобы вещественный и большой диапазон, может longreal smile.gif
pavel
Цитата(Bjorndalen @ Oct 7 2007, 17:48) *
есть такой вопрос. Программа работает правильно, значение находит верно, оно совпадает с бибилотечной функцией, но при больших значениях n происходит переполнение памяти, как можно облегчить программу, чтобы она работала так же правильно? Диапазон допустимых значений входных данных таков: 1<x<1, 1=<n<=9
есть подозрение, что переполнение происходит, когда x*n выходит из диапазона -1<x<1. Для x>1 и x<-1 другие разложения в ряд.
AlRunner
Цитата(Bjorndalen @ Oct 8 2007, 19:58) *
Позвольте спросить, а какой? Чтобы вещественный и большой диапазон, может longreal smile.gif


Используй тип double!
pavel
Цитата(AlRunner @ Oct 10 2007, 22:58) *
Используй тип double!
зачем менять тип данных, если точность вычислений от этого не изменится (она жестко задана в программе = 1e-10), и ей не приходится оперировать такими большими значениями, которые бы не поместились в тип real?
Sandro
Цитата(Kumarr @ Oct 12 2007, 16:31) *
народ помогите плиз прогу в QBasic'е надо написать: дан двумерный целочисленный массив A(m;n). Задается с экрана либо генерируется в пределах (-20;20) Требуется найти среднее арифметическое каждого столбца

ну вот smile.gif а мне бы решение задачи этой в паскале.
Bjorndalen
Цитата(pavel @ Oct 11 2007, 02:58) *
зачем менять тип данных, если точность вычислений от этого не изменится (она жестко задана в программе = 1e-10), и ей не приходится оперировать такими большими значениями, которые бы не поместились в тип real?

Может дело в большом количестве повторений циклов? В памяти не умещается....
pavel
Цитата(Bjorndalen @ Oct 13 2007, 15:38) *
Может дело в большом количестве повторений циклов? В памяти не умещается....
по-моему, это все же связано с тем, что ограничение ты задаешь для X, а арктангенс вычисляешь для X*I (I=1..N) при помощи ряда, который сходится только если аргумент в диапазоне (-1, 1). когда X*I выходит из этого диапазона, значения в переменных arc, chisl и slag должны довольно быстро расти и, возможно, переполнение происходит, когда одна из них уже не помещается в тип real.
очень большое кол-во циклов (бесконечное) можно получить, задав значения X и N равными 1, будет ли переполнение в этом случае или программа просто "зависнет"?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.