Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Парочка задачек на Turbo Pascal'е

Модерирует : ShIvADeSt

ShIvADeSt (31-03-2009 02:00): Вверху прибитая тема.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

   

CoddeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker

Цитата:
есть алгоритм на Прологе  

а что такое есть Пролог? (то что это язык программирования, я знаю...)
и что есть рекруссивный метод? рекрусивный метод для решения задачки по моему, а мне нужна сама игра...

Всего записей: 69 | Зарегистр. 10-04-2003 | Отправлено: 15:43 28-04-2003
red2003



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет народ!!! i`am need help!!! Блин задачки нада сделать а я впаскале не силён...а уже нада скоро сдать их.....помогите плзззз!
 Задача №1
Определить значение функции y. Необходимо использовать не менее одной подпрограммы-функции и подпрограммы-процедуры.
 Исходные данные:значения элементов массивов А[1...k] (или А[1...k,1...k]) и переменные В,С  в зависимости от условия задачи.  
Пример:  
В формулах расчёта у использованы следующие обозначения:
 М12- номер (индекс) строки максимального элемента матрицы.
 
  Задача №2  
Найти корни функций на заданном иниервале соответствующим методом.
Задачу решить методом дихотомии(деления отрезка пополам).
 Пример: Cos(x-Exp(x))     [0,2]
 
Задача№3
Задан массив чисел X[1...15].Определить значение переменной у. Исходные данные и результат напечатать с пояснительным текстом.
 Пример:  
В формулах расчёта у использованы следующие обозначения:
A1-сумма элементов массива Х
А4-сумма косинусов положительного массива Х
М1-колличество элементов массива Х, значения которых меньше А1
 
 Задача №4
 Задание№1
Записать программу, выполняющую следующие операции:
-ввод с кдавиатуры последовательности (колличество элементов m произвольно , но максимальный размер последоательности N фиксирован, M<=N);
-сортировка роследовательности ро возрастанию (убыванию) указанным методом;
-поиск заданного элемента в последовательности.
     
    Вид последовательности:
 
-варианты 1,3,5,7,9-числовая;
-варианты2,4,6,8,10-нечисловая
     
     Сортировку данных реализовать:
-варианты 1,5,9 - методом "пузырька";
-варианты2,6,10-методом включения (простых вставок);
-варианты 3,4,7,8-методом простого выбора;
  Задание№2
Написать меню для демонстрации работы пунктов задания 1.
 
 
 
Буду очень благодарен.........если чё пишите на redline@students.ru

Всего записей: 7 | Зарегистр. 27-04-2003 | Отправлено: 17:03 28-04-2003 | Исправлено: red2003, 00:36 29-04-2003
CoddeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
red2003
 
Мы тута про игры... а ты Иди лучше пей пиво  
 
Люди помогите мне написать игрушкеу на ТурбоПаскале!

Всего записей: 69 | Зарегистр. 10-04-2003 | Отправлено: 17:09 28-04-2003
red2003



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CoddeX  
 Блин...я уже пива обпился....так что ща время за учёбу браться!

Всего записей: 7 | Зарегистр. 27-04-2003 | Отправлено: 17:12 28-04-2003 | Исправлено: red2003, 17:14 28-04-2003
autumn_orion



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
red2003
Судя по формуле у тебя дан все-таки двумерный массив...
Какую смысловую нагрузку несут переменные B и C?
 
Кстати, суммирование в формуле по j?

Всего записей: 157 | Зарегистр. 09-08-2002 | Отправлено: 17:53 28-04-2003 | Исправлено: autumn_orion, 17:54 28-04-2003
CoddeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
autumn_orion
Он условие не то написал.. ща перепишет как надо....

Всего записей: 69 | Зарегистр. 10-04-2003 | Отправлено: 17:59 28-04-2003
mymuss



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Про ханойский башни.
 
Мне известно 2 алгоритма:
А1) Простой рекурсивный
А2) Хитрый нерекурсивный
 
Итак пусть у нас есть n дисков и надо их переместить с 1-го столбика на 2-й, используя 3-й.
А1) Используем метод "разделяй и влавствуй".
Рекурсивная процедура решения выглядит приблизительно так:

Код:
 
Шаг 1. Применяя эту процедуру перемещаем n-1 дисков с 1-го столбика на 3-й
Шаг 2. Перемещаем n-й диск на 2-й столбик
Шаг 3. Применяя эту процедуру перемещаем n-1 дисков с 3-го столбика на 2-й
 

 
Разумеется в проге надо при каждом вызове правильные номера столбиков использовать.
 
А2) Пусть столбики стоят в вершинах некоторого треугольника.

Код:
 
Шаг 1. i = 1
Шаг 2. Если (i - нечетное)  
  Тогда
    переместить наименьший диск на соседний столбик по часовой стрелке  
  Иначе
    Выполнить другое возможное перемещение не связанное с перемещением наименьшего диска.
 

 
Теперь задачка для мозгов: Почему этот алгоритм (A2) работает?
 
Кто знает еще алгоритмы?
 
CoddeX

Цитата:
а что такое есть Пролог

Логического программирования я бы даже сказал. Используется в основном для решения задач искусственного интеллекта и прочих модных вещей. В реальной жизни применяется редко.
 
L0Ve

Цитата:
1.

Вообще хорошим стилем есть инициализация переменных, например count. Я уже не помню, как ведет себя компилятор Паскаля, но во многих серьезных языках не всегда она будет проинициализирована в 0. Скажем, в C локальные переменные объявленные без модификатора static в 0 не инициализируются!

Всего записей: 709 | Зарегистр. 13-04-2003 | Отправлено: 19:58 28-04-2003
CoddeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mymuss
 
Смотри здесь http://forum.ru-board.com/topic.cgi?forum=33&topic=1378

Всего записей: 69 | Зарегистр. 10-04-2003 | Отправлено: 08:28 29-04-2003
autumn_orion



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
red2003
 
program test1;
 
const k=3;
 
type matrix=array[1..k,1..k] of double;
 
 
      procedure init(var a:matrix);
          begin
          a[1,1]:=3.12;
          a[1,2]:=2.14;
          a[1,3]:=6.18;
          a[2,1]:=8.99;
          a[2,2]:=9.00;
          a[2,3]:=14.77;
          a[3,1]:=15.6;
          a[3,2]:=9.8;
          a[3,3]:=100.0;
          end;
 
     function max_str_num(const a:matrix):integer;
     var i,j:integer;
         maxelem:real;
     begin
     maxelem:=a[1,1];
     max_str_num:=1;
     for i:=1 to k do
        for j:=1 to k do
            if (a[i,j]>maxelem) then
            begin
            maxelem:=a[i,j];
            max_str_num:=i;
            end;
     end;
 
     function Y(const a:matrix; const strnum:integer):real;
     var i:integer;
         tmpY:real;
     begin
     tmpY:=0;
     for i:=1 to k do
     tmpY:=tmpY+a[strnum,i]+a[i,strnum];
     Y:=tmpY*strnum/strnum;
     end;
 
{main}
var matr:matrix;
    i:integer;
begin
init(matr);
i:=max_str_num(matr);
writeln ('result=',Y(matr,i));
end.
 
вот тебе первая задачка.
Только я не понял глубокий смысл умножения на м21 и деления на него же в формуле
Ксати, массив целочисленный или нет?

Всего записей: 157 | Зарегистр. 09-08-2002 | Отправлено: 14:54 29-04-2003 | Исправлено: autumn_orion, 16:48 30-04-2003
red2003



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
autumn_orion  
 Сенкссс...огромный..тебе...помог......
 
 

Цитата:
Только я не понял глубокий смысл умножения на м21 и деления на него же в формуле  
Ксати, массив целочисленный или нет?  

   
Я и сам не понял этого смысла..   Массив вроде целочисленный!

Всего записей: 7 | Зарегистр. 27-04-2003 | Отправлено: 15:13 29-04-2003
autumn_orion



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
red2003
Если целочисленный, то исправь real на integer.
 
Вот тебе вторая задачка:
 
program test2;
 
function f(const x:real):real;
begin
f:=cos (x-exp(x));
end;
 
procedure root(const a0,b0,tol:real;var _root:real);
var a,b,c,delta:real;
{ a0 < b0 !!! and root exists}
begin
a:=a0;
b:=b0;
repeat
c:=(a+b)/2;
if (f(a)*f(c))<0 then
   b:=c
   else
   a:=c;
delta:=abs(f(c));
until (delta<tol);
_root:=c;
end;
 
 
{main}
var x,a,b,tol:real;
begin
tol:=1e-06;
a:=0;
b:=2;
root(a,b,tol,x);
writeln ('root=',x);
end.
 
Только если будешь подставлять другие функции убедись, что они на заданном промежутке имеют 1 корень и переменная a содержит левый конец интервала, а переменная b -- правый конец интервала. В противном случае у тебя программа зависнет.  
(т.е. можно написать умную прогу, но, по-моему, это не требуется)
 
Добавлено
red2003
 

Цитата:
положительного массива Х

 
А это что за зверь???  
...положительных элементов массива X?

Всего записей: 157 | Зарегистр. 09-08-2002 | Отправлено: 15:19 29-04-2003
red2003



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
autumn_orion Упссс....не заметил.....
 A4-сумма косинусов положительных элементов Х.
Сенкс за вторую задачку

Всего записей: 7 | Зарегистр. 27-04-2003 | Отправлено: 15:47 29-04-2003 | Исправлено: red2003, 15:48 29-04-2003
autumn_orion



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
red2003
 
лови третью...  
только пояснения сам напиши
 
program test3;
 
const k=15;
 
type vector=array [1..k] of real;
 
 
function Y(const A1,A4:real; const M1:integer):real;
begin
if (A1>=0) then
Y:=0.000135*A4
else
Y:=(A1+2.8*0.001*A4)/(0.3+M1*A1);
end;
 
function A1_sum(const _vector:vector):real;
var tmpsum:real;
    i:integer;
begin
tmpsum:=0;
for i:=1 to k do
tmpsum:=tmpsum+_vector[i];
A1_sum:=tmpsum;
end;
 
function A4_sum(const _vector:vector):real;
var tmpsum:real;
    i:integer;
begin
tmpsum:=0;
for i:=1 to k do
if _vector[i]>0 then
tmpsum:=tmpsum+cos(_vector[i]);
A4_sum:=tmpsum;
end;
 
function M1_val(const _vector:vector; const _A1:real):integer;
var i,count:integer;
begin
count:=0;
for i:=1 to k do
if (_vector[i]<_A1) then
count:=count+1;
M1_val:=count;
end;
 
procedure print_vector (const _vector:vector);
var i:integer;
begin
for i:=1 to k do
writeln ('X[',i,']=',_vector[i]);
end;
 
procedure init (var _vector:vector);
begin
_vector[1]:=1.0;
_vector[2]:=2.0;
_vector[3]:=3.0;
_vector[4]:=3.0;
_vector[5]:=2.0;
_vector[6]:=1.0;
_vector[7]:=-1.0;
_vector[8]:=-2.0;
_vector[9]:=-3.0;
_vector[10]:=-2.0;
_vector[11]:=-1.0;
_vector[12]:=5.0;
_vector[13]:=10.0;
_vector[14]:=11.0;
_vector[15]:=-27.0;
end;
 
{main}
var X:vector;
    A1,A4:real;
    M1:integer;
begin
init (X);
print_vector(X);
A1:=A1_sum(X);
A4:=A4_sum(X);
M1:=M1_val(X,A1);
writeln ('A1=',A1);
writeln ('A4=',A4);
writeln ('M1=',M1);
writeln ('result=',Y(A1,A4,M1))
end.
 
Удачи... Больше времени, увы, нет...
 
__  
кстати, во второй задачке tol -- точность, с котоорой ищется корень

Всего записей: 157 | Зарегистр. 09-08-2002 | Отправлено: 15:56 29-04-2003 | Исправлено: autumn_orion, 15:58 29-04-2003
red2003



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

autumn_orion
 

Цитата:
   
 
Поравочка.......за место *M12 там М2......я просто ночью всё этоделал ......запарился..немного!!!  
М2-Колличество положительных элементов матрицы!
 

Всего записей: 7 | Зарегистр. 27-04-2003 | Отправлено: 16:05 29-04-2003
autumn_orion



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
red2003
 

Цитата:
М2-Колличество положительных элементов матрицы!

 
тогда так:
 
program test1;
 
const k=3;
 
type matrix=array[1..k,1..k] of double;
 
 
procedure init(var a:matrix);
  begin
    a[1,1]:=3.12;
    a[1,2]:=2.14;
    a[1,3]:=6.18;
    a[2,1]:=8.99;
    a[2,2]:=9.00;
    a[2,3]:=14.77;
    a[3,1]:=15.6;
    a[3,2]:=9.8;
    a[3,3]:=100.0;
  end;
 
     function max_str_num(const a:matrix):integer;
 var i,j:integer;
 maxelem:real;
 begin
 maxelem:=a[1,1];
 max_str_num:=1;
 for i:=1 to k do
   for j:=1 to k do
     if (a[i,j]>maxelem) then
     begin
     maxelem:=a[i,j];
     max_str_num:=i;
     end;
 end;
 
     function M2_val(const a:matrix):integer;
var i,j,count:integer;
begin
count:=0;
for i:=1 to k do
for j:=1 to k do
if (a[i,j]>0) then
count:=count+1;
M2_val:=count;
end;
 
  function Y(const a:matrix; const strnum,M2:integer):real;
  var i:integer;
  tmpY:real;  
  begin
  tmpY:=0;
  for i:=1 to k do
  tmpY:=tmpY+a[strnum,i]+a[i,strnum];
  Y:=tmpY*M2/strnum;
  end;
 
{main}
var matr:matrix;
i,j:integer;
begin
init(matr);
i:=max_str_num(matr);
j:=M2_val(matr);
writeln ('result=',Y(matr,i,j));
end.
 

Всего записей: 157 | Зарегистр. 09-08-2002 | Отправлено: 11:38 30-04-2003
red2003



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
autumn_orion
Пасиба ещё раз огромное....ты мне помог!!!
 

Всего записей: 7 | Зарегистр. 27-04-2003 | Отправлено: 16:01 30-04-2003
CoddeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет народ!!! i`am need help!!! Блин задачки нада сделать а я впаскале не силён...а уже нада скоро сдать их.....помогите плзззз!  
 
1)составить алгоритм и программу вычисления выражения 5x+3x^2*корень(1+x^3*sin(2x))/(2*c^x+a^2)
 
2)Даны функции y1=(4+x)^2 и y2=-x. Составить алгоритм и программу, для нахождения точки пересечения этих функций при -4<=x<=0. Вычисления производить с точностью до E.
 
3)В резервуаре, имеющем форму цилиндра диаметром D=2,5м и высотой H=6,5м и стоящем вертикально, хранится масло. Через отверстие в резервуаре S=3 см^2 на высоте А=0,35Н вытекает масло. Течь заметили четез Т=6ч. Скорость вытекания V=корень(2g(L-A)), где уровень масла в данный момент времени L=2,8м, ускорение силы тяжести g=9,8. Количество масла, вытекающего в единицу времени из резервуара Q=V*S. Какое количество масла (%) потеряно на момент обнаружения течи.

Всего записей: 69 | Зарегистр. 10-04-2003 | Отправлено: 22:20 12-05-2003
CoddeX



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что, никто помоч не может?

Всего записей: 69 | Зарегистр. 10-04-2003 | Отправлено: 09:20 13-05-2003
autumn_orion



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
CoddeX
Это -- номер раз...
 
program pr1;
 
function power(const arg,deg:real):real;
begin
power:=exp(deg*ln(arg));
end;
 
{main}
var a,c,f,x:real;
begin
a:=1.5;
c:=2.5;
x:=10.0;
f:=5*x+3*x*x*sqrt(1+x*x*x*sin(2*x))/(2*power(c,x)+a*a);
writeln ('a=',a,' c=',c, ' x=',x);
writeln ('result=',f);
end.

Всего записей: 157 | Зарегистр. 09-08-2002 | Отправлено: 16:28 14-05-2003
kmf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача номер 2 имеет аналитическое решение. Чтобы найти точку пересечения функций y1(x) и y2(x) нужно решить уравнение y1(x) - y2(x) = 0, тогда
(4+x)^2 - (-x) = 0,
16 + 8x + x^2 + x =0,
 x^2 + 9x + 16 = 0.
 
дальше решаешь это простейшее квадратное уравнение аналитическим методом
 
x1,2 = (-9 +-Sqrt(81 - 64))/2 = (-9 +- Sqrt(17))/2
 
x1 = (-9 + Sqrt(17))/2,
x2 = (-9 - Sqrt(17))/2.
 
 

Всего записей: 67 | Зарегистр. 14-02-2002 | Отправлено: 21:04 21-05-2003
   

Страницы: 1 2 3

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Парочка задачек на Turbo Pascal'е
ShIvADeSt (31-03-2009 02:00): Вверху прибитая тема.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru