Перейти до вмісту

Розвязання завдань з програмування


Повідомлень в темі: 191

#1 Nomad

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3581 повідомлень

Відправлено 06.01.2007 – 13:54

  • 191
Ось виникла така проблемка-треба скоро здавати розрахунково-графічну роботу а нічого майже для її створення немає Ось завдання-
Есть три стержня. На одном из них нанизаны круги разного диаметра в виде пирамидки. Нужно переложить круги с одного стержня на другой. При этом круги нужно класть так, чтобы круг с меньшим диаметром всегда был сверху. Пользователю нужно дать возможность перекладывать круги, запрещать ему неправильные ходы. Обязательно реализовать подсказку.
може хтось може чимось допомогти( інфу по даному питанню, про ісходніки навіть не мрію :) )?
Мова програмування-С++

#2 black_voron

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 206 повідомлень
  • Стать:Чоловік
  • Місто:Київ, Україна

Відправлено 06.01.2007 – 23:36

Таке діло нам розповідали на першому курсі на СДА (структура данних і алгоритмів). Покапаюсь в архівах, лекції повинні залишитись, там були навіть 3 алгоритми рішення цієїї задачі.:)) Можливо є і код, але тільки на Pascal.

Повідомлення відредагував black_voron: 06.01.2007 – 23:37

  • 0

#3 black_voron

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 206 повідомлень
  • Стать:Чоловік
  • Місто:Київ, Україна

Відправлено 06.01.2007 – 23:47

Ось рішення на Pascal. Напиши в ПС свій мейл, вишлю лекцію з алгоритмом розв"язку.

Program HanoyS;  {Метод решения – от обратного и стеки}
uses crt;
var 
  d,				   {количество дисков}
  f,					{указатель на стек, содержащий 1-й диск}
  n,				   {указатель на следующий стек}
  р,				   {указатель на предыдущий стек}
  i, j,				 {служебные}
  rep  : integer; {реплика (ответ) пользователя}
  w : array [1..3] of integer; {массив вершин}
  s : array [1..100, 1..3] of integer; {массив стеков}
BEGIN
  clrscr; writeln(‘сколько дисков ’); read (d);
  for i:=1 to 3 do w .[i] := 1;
  for i:=1 to d do s [i,1] := i; s [1,2]:=100; s [1,3]:=100;
  while (s [w [1], 1]  0) and (s [w [2], 2]  0) or (s [w [1], 1] 0) and (s [w [3], 3] 0) do
begin
{нечетный ход, перенос 1-го диска по часовой стрелке}
s [w [n], n] = s [w [f], f]; inc (w [n]); dec (w [f]);
{подготовка четного хода, т.е. сдвиг указателей по часовой стрелке}
inc (f);	if f > 3  then  f := 1;
inc (p);   if p > 3  then  p := 1;
inc (n);   if n > 3  then  n := 1;
{четный ход, в каком  стеке наименьший, но не 1-й диск?}
if  s [w [p]] < s [w [n]] then
begin s [w [n], n] = s [w [p], p]; inc (w [n]); dec (w [p]);  end	 
else
begin s [w [p], p] = s [w [n], n]; inc (w [p]); dec (w [n]);			  
end;
for i:=1 to d do for j:=1 to 3 do write (‘  ’, s [i, j] : 2); readkey;
   end;
END.

  • 0

#4 Nomad

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3581 повідомлень

Відправлено 07.01.2007 – 00:07

спасибі чувак мило ось- drzlo1@gmail.com
ще раз респект :)
  • 0

#5 GENTOR

    Постійний житель

  • На перевірці
  • PipPipPipPipPip
  • 153 повідомлень
  • Місто:Київська область

Відправлено 07.01.2007 – 03:20

Хлопче, хочеш прекрасний алгоритм на С++?(тільки суть дещо інша) Будь-ласка, ось код розв'язання класичної задачі, а спілкування з юзером допиши вже сам.
#include "iostream.h" 
void Hanoj(int n,char *a, char *b,char *c) 
{ 
	 if(n>1){ 
		 char t; 
		 Hanoj(n-1,a,c,b); 
		 t=*b; *b=*c; *c=t; 
		 cout<<*a<<"->"<<*b<<" "; 
		 Hanoj(n-1,c,a,b); 
		 t=*c; *c=*a; *a=t; 
		 t=*b; *b=*c; *b=t; 
	 } 
	 else{ 
		 cout<<*a<<"->"<<*c<<" "; 
	 } 
	 return; 
} 

int main(int argc, char* argv[]) 
{ 
	 int n; 
	 char a,b,c; 
	 a='A'; b='B'; c='C'; 
	 cout<<"Rings = "; 
	 cin>>n; 
	 Hanoj(n,&a,&b,&c); 
	 cout<<endl; 
	 return 0; 
}

Повідомлення відредагував GENTOR: 07.01.2007 – 03:21

  • 0

#6 Nomad

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 3581 повідомлень

Відправлено 07.01.2007 – 03:35

дякую...а от як це все реалізувати в OpenGL...ось ще одне питання...
  • 0

#7 koval

    Частий гість

  • Користувачі
  • PipPipPip
  • 33 повідомлень

Відправлено 22.03.2007 – 16:03

Всім привіт. Така ситуація. Треба написати програму. В якій би зберігалась інформація про людину. Наприклад:
ім'я
прізвище
вік
стать

І потім щоб можна було шукати відповідних людей задаючи параметри пошуку. Теоретично я знаю як таке робити. Беремо базу даних (хочу користуватись MySql, а саме libmysqld)

детальніше : _http://dev.mysql.com/doc/refman/5.0/en/libmysqld.html


створюємо одну таблицю в якій будуть колонки відповідно

ім'я
прізвище
вік
стать

а потім створюємо sql запит пошуку.

Так от як таке зробити на PHP я уявляю та навіть колись робив. Але прикол з PHP в тому що воно конектиться до серверної MySql. До тогож ж мені ПХП ближчий.
А як таке зробити локально поняття не маю.

Підкажіть як таке зробити на Delphi, C++ Builder'у або в крайньому випадку можете пояснити на Python,


Наразі це все.


і позабираєте зірочки, а то тут працює дуже гарно анти СПАМ захист :angry12:.
  • 0

#8 MrGALL

    Старійшина

  • Адміністратори
  • 2545 повідомлень
  • Стать:Чоловік
  • Місто:San Diego, CA || Kyiv, UA

Відправлено 22.03.2007 – 16:12

Постав собі на комп'ютер Денвер, там вже є пхп, mysql і т.п.

P.S. Спам фільтр вдосконалив :angry12:
  • 0

#9 koval

    Частий гість

  • Користувачі
  • PipPipPip
  • 33 повідомлень

Відправлено 22.03.2007 – 16:57

та мені не треба Денвера. в мене Апач нормально стоїть.
Я не під інет збираюсь програмувати, а під звичайний комп'ютер.

я не розумію самий принцип програмування використовуючі бібліотеку libmysqld.
Треба щоб мені хтось пояснив.
  • 0

#10 Ostap.J

    Чайник

  • Користувачі
  • Pip
  • 5 повідомлень

Відправлено 22.04.2007 – 15:30

Можу написати скрипта на Пітоні... через шелфи...
  • 0

#11 _Львівяночка_

    Чайник

  • Користувачі
  • Pip
  • 6 повідомлень

Відправлено 15.05.2007 – 12:01

;) Люди, допоможіть пліз!!!!!! Мені треба написати розрахункову з компютерної графіки, тема - "Стробоскопічний ефект". Нічого в неті не можу найти... :) треба здати, ато виженуть... :)

Повідомлення відредагував Сварус: 05.10.2007 – 16:08

  • 0

#12 Stuff

    Песиміст

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 2670 повідомлень
  • Стать:Чоловік
  • Місто:Львів..

Відправлено 15.05.2007 – 12:05

А що ж ви робите в тому навчальному закладі - навчаєтесь чи байдики б"єте:)
  • 0

#13 _Львівяночка_

    Чайник

  • Користувачі
  • Pip
  • 6 повідомлень

Відправлено 15.05.2007 – 12:48

Перегляд дописуStuff (15.05.2007 13:05) писав:

А що ж ви робите в тому навчальному закладі - навчаєтесь чи байдики б"єте:)



:) та я навчаюсь, займаюсь дизайном.... але програмування для мене це зенадто, особливо всякі стробоскопічні ефекти... ;)
  • 0

#14 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 15.05.2007 – 14:26

Стробоскопічний метод то не є щось таке дуже страшне.
Є два типи С.е.
1. Такий я пару разів бачив у фільмах - є кругла пластинка. на одному боці намальована пташка, на другому клітка. за допомогою шнурків цю пластинку обертають, і здається що пташка є в клітці. Це тому що зір в нас трохи інертний...
2. Маємо наприклад фільм як котиться колесо яке складається з 5-ти кадрів які циклічно повторюються, але світло в приміщенні мигає і ми не бачимо 5 послідовних кадрів. наприклад ми побачили 1-й кадр, потім світло загасло, ми не бачимо 2,3,4,5,1 кадрів і нарешті бачимо другий кадр, потім третій... Таким чином створюється ілюзія гальмування. А якщо світло буде мигати так, що не буде видно 3-х кардів - що буде? Ми будемо бачити анімацію в зворотньому порядку :cool1:

Отакі-от пироги.
  • 0

#15 _Львівяночка_

    Чайник

  • Користувачі
  • Pip
  • 6 повідомлень

Відправлено 15.05.2007 – 15:11

Перегляд дописуLukom (15.05.2007 15:26) писав:

Стробоскопічний метод то не є щось таке дуже страшне.
Є два типи С.е.
1. Такий я пару разів бачив у фільмах - є кругла пластинка. на одному боці намальована пташка, на другому клітка. за допомогою шнурків цю пластинку обертають, і здається що пташка є в клітці. Це тому що зір в нас трохи інертний...
2. Маємо наприклад фільм як котиться колесо яке складається з 5-ти кадрів які циклічно повторюються, але світло в приміщенні мигає і ми не бачимо 5 послідовних кадрів. наприклад ми побачили 1-й кадр, потім світло загасло, ми не бачимо 2,3,4,5,1 кадрів і нарешті бачимо другий кадр, потім третій... Таким чином створюється ілюзія гальмування. А якщо світло буде мигати так, що не буде видно 3-х кардів - що буде? Ми будемо бачити анімацію в зворотньому порядку :)

Отакі-от пироги.

ну от, мені викладач сказав зробити послідовно декілька кадрів, один нормальний кадр, один чорний, нормальний, чорний і т.д. Ну це зробити не важко... Але от потім треба запрограмувати частоту прокрутки кадрів, шоб при високій частоті не було видно цих чорних кадрів, а при малій їх має бути видно... А от як це зробити я не знаю... :cool1:
  • 0

#16 pyrius

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 284 повідомлень

Відправлено 15.05.2007 – 15:21

А мова яка?
  • 0

#17 Lukom

    Абориген

  • Користувачі
  • PipPipPipPip
  • 112 повідомлень
  • Стать:Чоловік
  • Місто:Ukraine-Lviv

Відправлено 15.05.2007 – 15:29

Гм, якщо подумати, то найбільша частота анімації буде, коли не буде паузи між показом картинок. Приклад коду:
while (true)
{
	ПоказСлайду(1);
	ПоказСлайду(2);
	ПоказСлайду(3);
}

А щоб зменшити частоту, то требуде додати паузи. Приклад коду:

Затримка = 100;

while (true)
{
	ПоказСлайду(1);
	sleep(Затримка);
	ПоказСлайду(2);
	sleep(Затримка);
	ПоказСлайду(3);
	sleep(Затримка);
}

Я би так робив напевно... В залежності від того на чому пишеш код буде різний. Взагалі питайся в шарющих одногрупників - напевно у всіх завдання приблизно схожі :cool1:
  • 0

#18 _Львівяночка_

    Чайник

  • Користувачі
  • Pip
  • 6 повідомлень

Відправлено 15.05.2007 – 15:36

Перегляд дописуpyrius (15.05.2007 16:21) писав:

А мова яка?

будь-яка... :cool1:

Перегляд дописуLukom (15.05.2007 16:29) писав:

Гм, якщо подумати, то найбільша частота анімації буде, коли не буде паузи між показом картинок. Приклад коду:
while (true)
{
	ПоказСлайду(1);
	ПоказСлайду(2);
	ПоказСлайду(3);
}

А щоб зменшити частоту, то требуде додати паузи. Приклад коду:

Затримка = 100;

while (true)
{
	ПоказСлайду(1);
	sleep(Затримка);
	ПоказСлайду(2);
	sleep(Затримка);
	ПоказСлайду(3);
	sleep(Затримка);
}

Я би так робив напевно... В залежності від того на чому пишеш код буде різний. Взагалі питайся в шарющих одногрупників - напевно у всіх завдання приблизно схожі ;)


а як сам слайд витягнути??? :)
  • 0

#19 Evol

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1846 повідомлень
  • Стать:Чоловік

Відправлено 15.05.2007 – 16:52

ги)) може йому підійде на флеші? в ActionScript можна попробувати :cool1:
  • 0

#20 pyrius

    Місцевий

  • Користувачі
  • PipPipPipPipPipPip
  • 284 повідомлень

Відправлено 15.05.2007 – 17:00

а що, потрібно саме слайд.
ефект буде видно навіть якщо ти просто замість слайду щось намалюєш.
наприклад будеш виводиди коло, зафарбоване червоним кольором, а наступною операцією його ховати і знову потім виводити.
Ефект буде помітний теж.
  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних


Магазин кубиков Рубика Cubes.in.ua