 |
Вітаю Вас, Гість · RSS |
 |
Розв’язування задач з теми "Процедури і функції"
| |
kom_adm |
Дата: Нд, 29.11.2009, 21:33 | Повідомлення № 1 |
Ветеран спілкування
Повідомлень: 3767
| В даній темі пропоную розв’язувати задачі з розділу "Процедури і функції" Будемо писати цікаві умови задач і хто знає, пише розв’язок. Обов’язкове правило теми: розв’язок повинен містити текст програми на мові програмування Паскаль або іншій. Допускаються коментарі щодо розв’язку, блок-схеми, НАМ. Важливо писати програми максимум оптимально. Не можна публікувати умови наступної задачі до тих пір, поки не буде розв’язана задана автором повідомлення задача. Прохання виконувати дане правило, інакше це прирівнюватиметься до порушень правил форуму. Не скупіться ділитись досвідом, роблячи тим самим внесок в розвиток форуму! Шановні форумчани! Повідомлення, які не відповідають темі або несуть некорисний зміст будуть видалятися без попередження!!!
|
|
| |
kom_adm |
Дата: Нд, 29.11.2009, 21:35 | Повідомлення № 2 |
Ветеран спілкування
Повідомлень: 3767
| Задача. Знайти найбільший спільний дільник трьох натуральних чисел a,b,c. Прохання писати розв’язки та наступні умови.
|
|
| |
Nevirkovets |
Дата: Пн, 30.11.2009, 08:30 | Повідомлення № 3 |
Написав MifTests
Повідомлень: 266
| Quote (Ковальчук_Олександр) Знайти найбільший дільник трьох натуральних чисел a,b,c. Шукаємо найбільший серед двох, а тоді те що отрималося із третім числом.
|
|
| |
vitert |
Дата: Пн, 30.11.2009, 11:35 | Повідомлення № 4 |
Тут живе...
Повідомлень: 174
| 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, 11:35 |
|
| |
kom_adm |
Дата: Пн, 30.11.2009, 18:25 | Повідомлення № 5 |
Ветеран спілкування
Повідомлень: 3767
| Nevirkovets, те що задача нескладна і так зрозуміло. Просто хочеться бачити різні методи рішення цієї задачі і найоптимальніший для школи. Ці всі теми створені для початківців. vitert, дуже дякую. Чи можливий оптимальний розв’язок даної задачі без використання процедури?
|
|
| |
volodschool2 |
Дата: Пн, 30.11.2009, 19:17 | Повідомлення № 6 |
Досвідчений учасник
Повідомлень: 1611
| Quote (Ковальчук_Олександр) без використання процедури? Звичайно можна. Напишіть вміст процедури два рази з використанням відповідних змінних, але краще навіть на початковому етапі вивчення програмування "підштовхувати" учнів до необхідності написання оптимального коду програми. Без процедур тут "и ни туды и ни сюды".
|
|
| |
kom_adm |
Дата: Пн, 30.11.2009, 19:33 | Повідомлення № 7 |
Ветеран спілкування
Повідомлень: 3767
| Наступна задача: Написати програму, в якій вводяться 3 цілих числа і перевіряється умова, чи задають ці числа довжини сторін трикутника і якщо задають, то визначається його вид: рівносторонній, рівнобедренний і не рівносторонній, різносторонній, гострокутний, прямокутний, тупокутний.
|
|
| |
volodschool2 |
Дата: Пн, 30.11.2009, 20:15 | Повідомлення № 8 |
Досвідчений учасник
Повідомлень: 1611
| 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, 20:24 |
|
| |
Ktara |
Дата: Пн, 30.11.2009, 20:21 | Повідомлення № 9 |
Перспективна вчителька
Повідомлень: 4317
| Задача. Найти НОК трех натуральных чисел a,b,c.
Відредаговано: Ktara - Пн, 30.11.2009, 20:23 |
|
| |
kom_adm |
Дата: Пн, 30.11.2009, 20:28 | Повідомлення № 10 |
Ветеран спілкування
Повідомлень: 3767
| 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, 21:07 | Повідомлення № 11 |
Лідер форуму
Повідомлень: 6386
| Із трьох відрізків можна скласти трикутник, коли будь-який з них буде меншим від суми двох інших. якщо (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, 21:11 | Повідомлення № 12 |
Лідер форуму
Повідомлень: 6386
| Quote (Ковальчук_Олександр) Забув уточнити, але дану задачу потрібно розв’язати з використанням підпрограм. Звичайно можна, але підпрограми тут не доречні. Вони нічого в даній задачі не спрощують. Quote (volodschool2) Не зовсім зрозуміло, чому довжини сторін трикутника мають бути обов’язково цілими числами, Quote (volodschool2) Цю задачу для "юних математиків" можна було б дещо ускладнити, задавши трикутник не довжинами сторін, а координатами його вершин (x1,y1,x2,y2,x3,y3). В обох випадках можуть виникнути труднощі із точністю обчислень.
|
|
| |
vitert |
Дата: Пн, 30.11.2009, 22:45 | Повідомлення № 13 |
Тут живе...
Повідомлень: 174
| 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, 22:46 |
|
| |
Bandalak |
Дата: Вт, 08.12.2009, 13:58 | Повідомлення № 14 |
Лідер форуму
Повідомлень: 6386
| 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, 14:20 | Повідомлення № 15 |
Досвідчений вчитель
Повідомлень: 1438
| Quote (Bandalak) if (a>=b+c) or (b>=a+c) or (c>=a+b) then Может xor вместо or?
|
|
| |
© Форум інформатиків України, 2007-2022.  |