Вт, 26.03.2019, 22:37
Форум інформатиків України
Головна Реєстрація Вхід
Вітаю Вас, Гість · RSS
Вітання на форумі
Незнайомець
Вітаємо на форумі,
Незнайомцю!

 
зареєструйтесь
Перед реєстрацією обов’язково прочитайте:
Оновлення Учасники Пошук
Особисті повідомлення
Видавництво ’’Аспект’’ Видавництво

  • Сторінка 2 з 7
  • «
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • »
Модератор форуму: Bandalak, Ktara, НІКОЛЯ, volevikt  
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Розв'язування задач методами процедурного програмування (Розв'язки цікавих задач олімпіадного та шкільного рівнів.)
Розв'язування задач методами процедурного програмування
Ковальчук_Олександр Дата: Нд, 21.10.2007, 16:37 | Повідомлення № 1
Ветеран спілкування
Повідомлень: 3703
Нагороди: 18
Рейтинг: 209
Пропоную в даній темі таке спілкування: хтось пише умову цікавої задачі з програмування, інші - намагаються розв'язати цю задачу і надіслати текст програми в цю тему з повним роз'ясненням розв'язку. Задачі можуть бути як шкільного, так і олімпіадного рівнів. Дана тема допоможе реально підвищити знання з програмування вчителям, які погано розуміються на задачах олімпіадного рівня. Нажаль, я також відносюся до цієї групи вчителів. Соромно, але факт.

Шановні форумчани!!!!!
Повідомлення, які не відповідають темі або несуть некорисний зміст будуть видалятись без попередження!!!
KulAlex Дата: Пн, 05.11.2007, 19:23 | Повідомлення № 16
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
А цікаво, де зберігаються дані певних властивостей, а це не ті самі змінні? Можем посперичатися!!! tongue
SLKuty Дата: Пн, 05.11.2007, 23:12 | Повідомлення № 17
Монтажер
Повідомлень: 833
Нагороди: 8
Рейтинг: 118
в кожного компонента є свій тег (компонент.tag) там можна тримати дійсне число.
в інспекторі об*єктів можна задати початкове значення, а під час виконання його змінювати
текстові змінні можна тримати в компонентах edit, label (їх властивість text, caption).
Newbie Дата: Вт, 06.11.2007, 21:49 | Повідомлення № 18
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
а хтось може дати повне вирішення задачі з тою черепашкою, бо мені не сходиться ні в яку! surprised

мене би цікавив розв*язок, фрагмент якого навів login

login Дата: Чт, 08.11.2007, 19:51 | Повідомлення № 19
Новий користувач
Повідомлень: 16
Нагороди: 0
Рейтинг: 1
Quote (Newbie)
мене би цікавив розв*язок, фрагмент якого навів login

Newbie, це не фрагмент, а проста ціла цікава класична задача, рзвязок якої привів badm в наступному повідомленні. Ця задача не має нічого спільного з "Черепашкю".

Quote (Newbie)
а хтось може дати повне вирішення задачі з тою черепашкою,

Я готовий витратити час на рішння "Черепашки",але за одної умови: Я розвяжу її тільки після того, як ви особисто рішите, і викладете рішення на цьому форумі до задачі "Тюль". Ця задача повинна бути Вам "по зубам".
Newbie, Успіху
Newbie Дата: Чт, 08.11.2007, 20:17 | Повідомлення № 20
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
login упс, то я помилилась surprised , я зверталась до badm .

не треба спеціально для мене рішати ту задачу, я думала є готове рішення. буду думати далі smile

а Тюль ми з учнями розбирали якраз в середу smile

Code
program tul;
var f,r:text;
d,s,s1,s2,i,j,a:integer;
res:string;
begin
assign(f,'z2.dat');
reset(f);
assign(r,'z2.sol');
rewrite(r);
read(f,d);
read(f,s);
s1:=0; s2:=0;
for i:=1 to d do
for j:=1 to s do
begin
read(f,a);
if (a=1) or (a=2) then s1:=s1+1 else s2:=s2+1;
end;
if s1=s2 then res:='yes' else res:='no';
writeln(r,res);
close(f);
close(r);
end.

рішення було не особисте, а групове smile з моїми восьмикласниками wink приймається?
SLKuty Дата: Чт, 08.11.2007, 20:23 | Повідомлення № 21
Монтажер
Повідомлень: 833
Нагороди: 8
Рейтинг: 118
Quote (login)
а хтось може дати повне вирішення задачі з тою черепашкою,

я можу дати свій розв*язок, але він зовсім іншим методом
половина задачі на Паскаль друга половина на Дельфі
Я її надіслав пану Олександру Ковальчуку і він скоро розмістить її десь для огляду
Newbie Дата: Чт, 08.11.2007, 20:25 | Повідомлення № 22
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
Quote (SLKuty)
SLKuty

обов*язково гляну, але Ваш спосіб мені здається не працюватиме з великими розмірами поля - надто багато потенційних шляхів
SLKuty Дата: Чт, 08.11.2007, 20:48 | Повідомлення № 23
Монтажер
Повідомлень: 833
Нагороди: 8
Рейтинг: 118
Звичайно, я розв*язував конкретно цю задачу
але я думаю, що в 2 рази збільшити можна без проблем
в даному випадку існує 70 можливих шляхів
я не бачу в програмі ніяких обмежень хіба що обмежений розмір масиву і розмір файлу для збереження всіх можливих шляхів

даю першу половину проги написану на паскалі

Текст програми для пошуку всіх можливих маршрутів черепахи (Borland Pascal 7).

Program Cherepaha;
uses wincrt;
var m,o,n,nn,i,j,k,l,lic0,lic1,licS:integer;
mas:array[1..50] of integer;
{масив для всіх можливих кроків в одному ході}
str:array[1..3000] of string[10];
{масив для всіх можливих ходів }
fil,fil2,filG:text; {файлові змінні}
s:string;
begin
randomize;
writeln ('n=');
readln (n);

m:=5000; {кількість випадкових 0 i 1}
assign (fil,'marsh.txt');
{файл зі всіма можливими маршрутами}
Rewrite(Fil);
assign (fil2,'marsh2.txt');
{2 файл зі всіма можливими маршрутами}
Rewrite(Fil2);
for i:=1 to m do begin
lic0:=0; {лічильники нулів і одиниць}
lic1:=0;
for k:=1 to n*2-2 do begin
l:=(random(2));
{заповнюємо масив випадковими нулями і одиницями}
mas[k]:=l;
end;
for k:=1 to n*2-2 do begin
if mas[k]=1 then lic1:=lic1+1; { }
if mas[k]=0 then lic0:=lic0+1;
end;
if lic0=lic1 then begin
{ вибираємо тільки ті де однакова
кількість нулів і одиниць}
if i>2000 then begin
for k:=1 to n*2-2 do write (fil2,mas[k]);
{записуємо в файл 2}
writeln(fil2);
licS:=licS+1;
end
else begin
for k:=1 to n*2-2 do write (fil,mas[k]); {записуємо в файл 1 }
writeln(fil);
licS:=licS+1;
end;
end;
end;
{if i>1000 then writeln(fil2,licS) else writeln(fil,licS);}
close (fil);
close (fil2);

{відкидаємо однакові маршрути}
assign (fil,'marsh.txt');
Reset(Fil);
assign (fil2,'marsh2.txt');
Reset(Fil2);
assign (filG,'marshG.txt');
Rewrite(FilG);

for i:=1 to licS+1 do begin
if i>2000 then begin
readln(fil2,s);
{заповнюємо масив строками з 2 го файлу}
str[i]:=s;end
else begin
readln(fil,s);
{zapovnuemo masyv strokamy z 1 faylu}
str[i]:=s;
end;
end;
for i:=1 to LicS+1 do
{перебираємо всі елементи масиву
від початку до кінця}
for j:=i+1 to licS+1 do
{перебираємо всі елементи масиву
від і+1 до кінця}
begin
if (str[j]=str[i])then
begin {якщо зустрічаємо
однакові рядкові змінні в двох комірках то}
str[j]:=''; {знищуємо однакові
елементи, щоб більше не зустрічалися}
end;
end;

for i:=1 to licS+1 do begin
{ writeln (str[i]); }
if str[i]<>'' then begin nn:=nn+1; writeln(filG,str[i]);end;
end;
writeln(filG,nn);
close (fil2);
close (fil);
close (filG);

end.

В результаті виконання програми створюється текстовий файл marshG.txt в якому записані всі можливі маршрути черепахи.
0-хід вниз 1-хід вправо

Добавлено (08.11.2007, 20:48)
---------------------------------------------
якщо відкинути пояснення програма не дуже велика

Ковальчук_Олександр Дата: Чт, 08.11.2007, 22:13 | Повідомлення № 24
Ветеран спілкування
Повідомлень: 3703
Нагороди: 18
Рейтинг: 209
Quote (SLKuty)
Я її надіслав пану Олександру Ковальчуку і він скоро розмістить її десь для огляду

SLKuty, дякую за чудову інформацію, що ви мені надіслали. Програма про Черепаху викладена в приваті. VIP-овці, заходьте сюди, скачуйте і оцінюйте.

badm Дата: Пт, 09.11.2007, 10:42 | Повідомлення № 25
Знаток програмування
Повідомлень: 185
Нагороди: 0
Рейтинг: 3
var i,j,k,n,m:integer;
s,l,A:array[1..100,1..100] of integer;
p:array[1..2,1..201] of integer;

begin
readln(n,m);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
L[n,m]:=A[n,m];{L масив який буде містити результат, передаєем значення з якого починаєм обчислення}
s[n,m]:=0; {для запису переходів}
For i:=n-1 downto 1 do
begin
L[i,m]:=L[i+1,M]+A[i,m];{cума по останьому рядку}
s[i,m]:=0;{якщо немає переходів по стопцям то 0 }
end;
{так само шукаємо суму для останього стовпця, тому для останього стовпця і рядка лише 1 шлях}
For i:=m-1 downto 1 do
begin
L[n,i]:=L[n,i+1]+A[n,i];{cума по останьому рядку}
s[n,i]:=1; {якщо переходи по стрічках то 1 }end;
{основна частина}
For j:=m-1 downto 1 do
For i:=n-1 downto 1 do
begin
if L[i,j+1]<L[i+1,j] then
begin
l[i,j]:=a[i,j]+l[i,j+1]; s[i,j]:=1; end
else begin
l[i,j]:=a[i,j]+l[i+1,j]; s[i,j]:=1; end;
end;
{тут для мене саме цікаве розкрутка шляху}
i:=1;
j:=1;
k:=1;
while k<N+M do
begin
p[1,k]:=i; p[2,k]:=j; k:=k+1;
if s[i,j]=1 then j:=j+1 else i:=i+1;
end;
writeln(l[1,1]);{виведення результату}
writeln;
for i:=1 to k-1 do
write('(',p[1,i],';',p[2,i],')');{виведення шляху}
end.
Найбільш для мене оптимальний розв’язок.
Є ідея створення доступного для вчителів методичного збірника по ООП на С++ на рівень середньої школи.
Чому на С++ тому, що дана мова для розуміння ООП найбільш підходить. Компілятор безкоштовний G++ (входить в комплект GCC).

Добавлено (09.11.2007, 10:42)
---------------------------------------------
Дана задача у багатьох олімпіадах була перефразована у черепашку, буратіно, діда мороза, але принцип залишається один і той

Newbie Дата: Пт, 09.11.2007, 17:01 | Повідомлення № 26
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
badm
ДЯКУЮ ВАМ!!!!

так, справді , ця задача вже давно мені зустрічалась, але я все не наважувалась взятись за розв*язок. а тут вона мене так заінтригувала, що вже третій тиждень рішаю! surprised на деяких тестових матрицях навіть получалось, але знаходилась одна-дві пастки sad та ще й я не сильний програміст, то і не получилось. навіть за підказками, і то не справилась wacko

SLKuty Дата: Пт, 09.11.2007, 22:32 | Повідомлення № 27
Монтажер
Повідомлень: 833
Нагороди: 8
Рейтинг: 118
Обов*язково розберу зі своїми гуртківцями
Доречі в нас відбулася районна олімпіада
Мій учень зайняв перше місце
Пропоную обмінятися задачами
Як тільки в мене буде цифровий варіант задач зразу виставлю на форумі
Newbie Дата: Сб, 10.11.2007, 14:50 | Повідомлення № 28
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
мабуть я щось не так роблю, але зазначена програма для вхідного файлу
Quote
12 3 7 10 3 8 4 15 7 9 11 10 1 5 9 17 2 9 4 7 3 8 9 10 17

дає результат
Quote
0
(1;1)(2;1)(3;1)(4;1)
wacko

Добавлено (10.11.2007, 14:50)
---------------------------------------------
маленька поправка:
n=5 (m=5)
для інших вхідних даних такий же результат.
щось "не пляше" cry

login Дата: Сб, 10.11.2007, 16:56 | Повідомлення № 29
Новий користувач
Повідомлень: 16
Нагороди: 0
Рейтинг: 1
в своїй протрамі "тюль", Newbie обнуляє змнні перд першим їх використанням

Code
s1:=0; s2:=0;

Хочу почути думку всіх: чи Варто це робити.
Потім - висловлю свою точку зору.

SLKuty Дата: Пт, 16.11.2007, 20:59 | Повідомлення № 30
Монтажер
Повідомлень: 833
Нагороди: 8
Рейтинг: 118
Ну скажіть хто небудь хоч слово!!!!
Хто бачив мою візуальну черепаху в приваті?
цілий місяць писав!
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Розв'язування задач методами процедурного програмування (Розв'язки цікавих задач олімпіадного та шкільного рівнів.)
  • Сторінка 2 з 7
  • «
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • »
Пошук:


© Форум інформатиків України, 2007-2019.