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

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

Сторінка 1 з 212»
Модератор форуму: Ktara, Bandalak, НІКОЛЯ, volevikt 
Форум інформатиків » РОЗДІЛ ІІІ: МЕТОДИКА, ЗАСОБИ ВИКЛАДАННЯ ІНФОРМАТИКИ » 3.6 Методика викладання інформатики згідно програми » Розв’язування задач з теми "Процедури і функції" (Тільки конкретика)
Розв’язування задач з теми "Процедури і функції"
Ковальчук_Олександр Дата: Нд, 29.11.2009, 22:33 | Повідомлення № 1
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
В даній темі пропоную розв’язувати задачі з розділу "Процедури і функції"
Будемо писати цікаві умови задач і хто знає, пише розв’язок.
Обов’язкове правило теми: розв’язок повинен містити текст програми на мові програмування Паскаль або іншій. Допускаються коментарі щодо розв’язку, блок-схеми, НАМ. Важливо писати програми максимум оптимально. Не можна публікувати умови наступної задачі до тих пір, поки не буде розв’язана задана автором повідомлення задача.
Прохання виконувати дане правило, інакше це прирівнюватиметься до порушень правил форуму.
Не скупіться ділитись досвідом, роблячи тим самим внесок в розвиток форуму!

Шановні форумчани! Повідомлення, які не відповідають темі або несуть некорисний зміст будуть видалятися без попередження!!!

Ковальчук_Олександр Дата: Нд, 29.11.2009, 22:35 | Повідомлення № 2
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Задача.
Знайти найбільший спільний дільник трьох натуральних чисел a,b,c.

Прохання писати розв’язки та наступні умови.

Nevirkovets Дата: Пн, 30.11.2009, 09:30 | Повідомлення № 3
Написав MifTests
Повідомлень: 266
Нагороди: 0
Рейтинг: 12
Quote (Ковальчук_Олександр)
Знайти найбільший дільник трьох натуральних чисел a,b,c.

Шукаємо найбільший серед двох, а тоді те що отрималося із третім числом.
vitert Дата: Пн, 30.11.2009, 12:35 | Повідомлення № 4
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (Ковальчук_Олександр)
Знайти найбільший дільник трьох натуральних чисел a,b,c.

Quote (Nevirkovets)
Шукаємо найбільший серед двох, а тоді те що отрималося із третім числом.

Саме так, використовуючи алгоритм Евкліда:
program nsd3;
var a,b,c,max:integer;

procedure nsd(m,n:integer;var maxmn:integer);
var x:integer;
begin
if n>m then begin x:=n; n:=m; m:=x; end;
while m mod n<>0 do begin
m:=m mod n;
if n>m then begin x:=n; n:=m; m:=x; end;
end;
maxmn:=n;
end;

begin
readln(a,b,c);
nsd(a,b,max);
nsd(c,max,max);
writeln(max);
end.

Відредаговано: vitert - Пн, 30.11.2009, 12:35
Ковальчук_Олександр Дата: Пн, 30.11.2009, 19:25 | Повідомлення № 5
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Nevirkovets, те що задача нескладна і так зрозуміло. Просто хочеться бачити різні методи рішення цієї задачі і найоптимальніший для школи. Ці всі теми створені для початківців.
vitert, дуже дякую.
Чи можливий оптимальний розв’язок даної задачі без використання процедури?
volodschool2 Дата: Пн, 30.11.2009, 20:17 | Повідомлення № 6
Досвідчений учасник
Повідомлень: 1361
Нагороди: 12
Рейтинг: 267
Quote (Ковальчук_Олександр)
без використання процедури?

Звичайно можна. Напишіть вміст процедури два рази з використанням відповідних змінних, але краще навіть на початковому етапі вивчення програмування "підштовхувати" учнів до необхідності написання оптимального коду програми. Без процедур тут "и ни туды и ни сюды".
Ковальчук_Олександр Дата: Пн, 30.11.2009, 20:33 | Повідомлення № 7
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Наступна задача:
Написати програму, в якій вводяться 3 цілих числа і перевіряється умова, чи задають ці числа довжини сторін трикутника і якщо задають, то визначається його вид: рівносторонній, рівнобедренний і не рівносторонній, різносторонній, гострокутний, прямокутний, тупокутний.
volodschool2 Дата: Пн, 30.11.2009, 21:15 | Повідомлення № 8
Досвідчений учасник
Повідомлень: 1361
Нагороди: 12
Рейтинг: 267
Quote (Ковальчук_Олександр)
Написати програму, в якій вводяться 3 цілих числа і перевіряється умова, чи задають ці числа довжини сторін трикутника і якщо задають, то визначається його вид: рівносторонній, рівнобедренний і не рівносторонній, різносторонній, гострокутний, прямокутний, тупокутний.

Не зовсім зрозуміло, чому довжини сторін трикутника мають бути обов’язково цілими числами, але це не суттєво. Цю задачу для "юних математиків" можна було б дещо ускладнити, задавши трикутник не довжинами сторін, а координатами його вершин (x1,y1,x2,y2,x3,y3). Але будемо розв’язувати задачу згідно заданої умови. Даю варіант, чекаю критики. Шкода, що при вставці коду програми з паскаля втрачається "ступінчастий" стиль запису і програма "читаєься" гірше, але тут має бути все зрозуміло і без коментарів.

Program TRIKUTNIK;
uses crt;
var
a,b,c,d,e,f:integer;
begin
clrscr;
writeLn('Введіть довжини сторін трикутника');
write('a='); readln(a);
write('b='); readln(b);
write('c='); readln( c );
Write('Трикутник ');
if (a+b>c) and (a+c>b) and (b+c>a) then begin
if (a=b)and(b=c) then write('рівносторонній, ')
else if (a=b)or(a=c)or(b=c)
then write('рівнобедрений, ')
else write('різносторонній, ');
f:=a; d:=b; e:=c;
if f<b then begin
f:=b; d:=a; e:=c;
end;
if f<c then begin
f:=c; d:=b; e:=a;
end;
if sqr(f)>(sqr(d)+sqr(e)) then writeln('тупокутний') else
if sqr(f)<(sqr(d)+sqr(e)) then writeln('гострокутний') else
writeln('прямокутний');
end else writeln('не існує');
readkey;
end.

Відредаговано: volodschool2 - Пн, 30.11.2009, 21:24
Ktara Дата: Пн, 30.11.2009, 21:21 | Повідомлення № 9
Перспективна вчителька
Повідомлень: 3909
Нагороди: 36
Рейтинг: 285
Задача.
Найти НОК трех натуральных чисел a,b,c.


Відредаговано: Ktara - Пн, 30.11.2009, 21:23
Ковальчук_Олександр Дата: Пн, 30.11.2009, 21:28 | Повідомлення № 10
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Quote (volodschool2)

f:=a; d:=b; e:=c;
if f<b then begin
f:=b; d:=a; e:=c;
end;
if f<c then begin
f:=c; d:=b; e:=a;
end;
if sqr(f)>(sqr(d)+sqr(e)) then writeln('тупокутний') else
if sqr(f)<(sqr(d)+sqr(e)) then writeln('гострокутний') else

Напишіть, будь-ласка, коментарі до цього блоку.
Забув уточнити, але дану задачу потрібно розв’язати з використанням підпрограм.
Bandalak Дата: Пн, 30.11.2009, 22:07 | Повідомлення № 11
Лідер форуму
Повідомлень: 5437
Нагороди: 37
Рейтинг: 247
Із трьох відрізків можна скласти трикутник, коли будь-який з них буде меншим від суми двох інших.
якщо (a<b+c) i (b<a+c) i (c<b+a) тоді трикутник існує, інакше не існує

По кутах і по сторонах - це різні категорії ознак, тому вони описуються окремо.
1) по сторонах
Якщо (a=b) i (a=c) тоді трикутник рівносторонній
якщо (а=b) або (a=c) або (c=b) тоді трикутник рівнобедренний але не рівносторонній
якщо (а<>b) i (a<>c) i (c<>b) тоді трикутник різносторонній (хоча можна методом виключення через інакше)
2) по кутах
якщо (а1=b1+с1) або (b1=c1+a1) або (c1=a1+b1) тоді трикутник прямокутний
якщо (а1>b1+с1) або (b1>c1+a1) або (c1>a1+b1) тоді трикутник тупокутний
якщо (а1<b1+с1) i (b1<c1+a1) i (c1<a1+b1) тоді трикутник гострокутний (хоча також можна методом виключення через інакше)
Де a1, b1, c1 квадрати відповідних сторін

У результаті має вийти, або повідомлення що трикутник не існує. Або ж пара характеристик, одна по кутах, інша по сторонах.
У мене у школі є ця задача дуже красиво написана, лінь ще раз писати. Завтра скину.

Давайте ускладнимо задачу.
У вхідному файлі в першому рядку знаходиться число N<=1000, а в решті N рядків трійка цілих чисел, що по модулю не перевищують 175.
У вихідному файлі повинно міститися N рядків, у кожному з них надрукований певний прапор ознак по даному правилу.
Якщо з даної трійки чисел трикутник не можливо скласти - NO;
В іншому випадку комбінація двох ознак по сторонах і по кутах:
Рівносторонній - S
Рівнобедрений (не рівносторонній) - B
Різносторонній - Z
та
Прямокутний - P
Тупокутний - T
Гострокутний - G
Наприклад:
tryk.dat
3
1 2 3
5 5 5
3 4 5
tryk.sol
NO
SG
ZP

Bandalak Дата: Пн, 30.11.2009, 22:11 | Повідомлення № 12
Лідер форуму
Повідомлень: 5437
Нагороди: 37
Рейтинг: 247
Quote (Ковальчук_Олександр)
Забув уточнити, але дану задачу потрібно розв’язати з використанням підпрограм.

Звичайно можна, але підпрограми тут не доречні. Вони нічого в даній задачі не спрощують.

Quote (volodschool2)
Не зовсім зрозуміло, чому довжини сторін трикутника мають бути обов’язково цілими числами,

Quote (volodschool2)
Цю задачу для "юних математиків" можна було б дещо ускладнити, задавши трикутник не довжинами сторін, а координатами його вершин (x1,y1,x2,y2,x3,y3).

В обох випадках можуть виникнути труднощі із точністю обчислень.
vitert Дата: Пн, 30.11.2009, 23:45 | Повідомлення № 13
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (Ktara)
Задача. Найти НОК трех натуральных чисел a,b,c.

Легким движением пальцев по клаве НОД изложеный выше превращается в НОК:
program nok3;
var a,b,c,max:integer;
procedure nsd(m,n:integer;var maxmn:integer);
var x,y:integer;
begin
if n>m then begin x:=n; n:=m; m:=x; end;
y:=m*n;
while m mod n<>0 do begin
m:=m mod n;
if n>m then begin x:=n; n:=m; m:=x; end;
end;
maxmn:=trunc(y/n);
end;

begin
readln(a,b,c);
nsd(a,b,max);
nsd(c,max,max);
writeln(max);
end.

Відредаговано: vitert - Пн, 30.11.2009, 23:46
Bandalak Дата: Вт, 08.12.2009, 14:58 | Повідомлення № 14
Лідер форуму
Повідомлень: 5437
Нагороди: 37
Рейтинг: 247
Quote (Bandalak)
У мене у школі є ця задача дуже красиво написана, лінь ще раз писати. Завтра скину.

program trik2;
var a,b,c,n,i:integer;
begin
assign(input,'trik2.DAT');
assign(output,'trik2.SOL');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do
begin
readln(a,b,c);
if (a>=b+c) or (b>=a+c) or (c>=a+b) then
writeln('NO') else
begin
if (a=b) and (b=c) then
write('R') else
if (a=b) or (b=c) or (c=a) then
write('B') else write('Z');
if (c*c=a*a+b*b) or (a*a=b*b+c*c) or (b*b=a*a+c*c) then
writeln('P') else
if (c*c>a*a+b*b) or (a*a>b*b+c*c) or (b*b>a*a+c*c) then
writeln('T') else writeln('G')
end
end;
close(input);
close(output)
End.
dpi Дата: Пн, 25.01.2010, 15:20 | Повідомлення № 15
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
Quote (Bandalak)
if (a>=b+c) or (b>=a+c) or (c>=a+b) then

Может xor вместо or?
Форум інформатиків » РОЗДІЛ ІІІ: МЕТОДИКА, ЗАСОБИ ВИКЛАДАННЯ ІНФОРМАТИКИ » 3.6 Методика викладання інформатики згідно програми » Розв’язування задач з теми "Процедури і функції" (Тільки конкретика)
Сторінка 1 з 212»
Пошук:


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