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

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

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

Шановні форумчани!!!!!
Повідомлення, які не відповідають темі або несуть некорисний зміст будуть видалятись без попередження!!!
KulAlex Дата: Чт, 24.10.2013, 12:15 | Повідомлення № 76
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
а краще С++
#include<iostream>
using namespace std;
int main()
{
double a=50, d=8.18;
cout<<a*d<<endl;
cout<<(int)a*d<<endl;
cout<<50*8.18<<endl;
cout<<(int)50*8.18<<endl;
}



на Python 3.3.2
a=50
d=8.18
print(a*d)
print(int(a*d))
print(50*8.18)
print(int(50*8.18))



на C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double a = 50;
double d = 8.18;
Console.WriteLine(a * d);
Console.WriteLine((int)a * d);
Console.WriteLine(50 * 8.18);
Console.WriteLine((int)50 * 8.18);
}
}
}


на Visual Basic
Module Module1
    Sub Main()
        Dim a, d As Double
        a = 50
        d = 8.18
        Console.WriteLine(a * d)
        Console.WriteLine(Int(a * d))
        Console.WriteLine(50 * 8.18)
        Console.WriteLine(Int(50 * 8.18))
    End Sub
End Module


Відредаговано: KulAlex - Чт, 24.10.2013, 12:49
Newbie Дата: Чт, 24.10.2013, 12:54 | Повідомлення № 77
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
тобто в Паскаль ця проблема вирішення не має? :)
KulAlex Дата: Чт, 24.10.2013, 13:15 | Повідомлення № 78
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
А так працює
var a,d:real;
begin
a:= 50;
d:=8.18;
writeln(a*d);
writeln(a*d:0:0);
writeln(50*8.18);
writeln(50*8.18:0:0)
end.
Newbie Дата: Чт, 24.10.2013, 13:39 | Повідомлення № 79
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
Цитата KulAlex ()
А так працює
так працює на виведення, але не на розрахунки. тобто якщо мені потрібно з тою цілою частиною щось далі робити - я не можу використати її

наразі вирішили таким чином:
Код
program p1;
var d,a:real;k:integer;
begin
a:= 50;
d:=8.18;
if frac(a*d)>0.9999  then k:=trunc(a*d)+1 else k:=trunc(a*d);
writeln(k);
end.

Додано (24.10.2013, 13:39)
---------------------------------------------
а загалом, щиро вдячна за наочне порівняння середовищ програмування. підтверджує мої деякі думки щодо застосовності їх у школі.
чому на олімпіадах не використовують Python?

Bandalak Дата: Чт, 24.10.2013, 15:30 | Повідомлення № 80
Лідер форуму
Повідомлень: 6069
Нагороди: 43
Рейтинг: 276
В ТурбоПаскаль7 рахує правильно!

program p1; 
var a,d:real; 
begin 
a:= 50; 
d:=8.18; 
writeln(a*d); 
writeln(trunc(a*d )); 
writeln(50*8.18); 
writeln(trunc(50*8.18));
readln 
end.
Прикріплення: 0470459.jpg(55.1 Kb)
Newbie Дата: Чт, 24.10.2013, 18:47 | Повідомлення № 81
Хелпер
Повідомлень: 1414
Нагороди: 9
Рейтинг: 91
в школі в ТурбоПаскаль точно була помилка (і не знаю точно яка версія), а вдома вже не запущу, щоб подивитись.

полистала тему, знайшла черепашку :)
да, у мене вона вже мандрує, як має бути. "дійшло" після відео звідси http://www.intuit.ru/studies/courses/997/313/info (3 лекція)

той код, що тут в повідомленні 25 (сторінка 2) таки не працює коректно. і, раз не було тут повного коду рішення, хочу поділитись своїм варіантом.

в архіві - проект на Делфі, в коді є коментарі. трохи неефективне прикінцеве виведення даних (через 2 текстові поля), але вже як є
Прикріплення: cherepaha.zip(219.7 Kb)
swetikccc Дата: Ср, 10.06.2015, 15:52 | Повідомлення № 82
Ветеран спілкування
Повідомлень: 4136
Нагороди: 31
Рейтинг: 387
Сьогодні з дітками на практиці придумали цікаву задачу.
Не використовуючи циклів вивести на екран послідовність чисел від введеного числа до нуля і знову до введеного числа.
Задача досить наглядна.
Пилипчук_О_П Дата: Ср, 10.06.2015, 23:49 | Повідомлення № 83
Ветеран спілкування
Повідомлень: 4268
Нагороди: 38
Рейтинг: 396
Цитата swetikccc ()
Не використовуючи циклів вивести на екран послідовність чисел від введеного числа до нуля і знову до введеного числа.
За хвилину не зорієнтувався, як це зробити... Сподіваюсь, goto і рекурсія теж не використовуються?
nolk-v Дата: Чт, 11.06.2015, 05:37 | Повідомлення № 84
Прописаний назавжди
Повідомлень: 295
Нагороди: 2
Рейтинг: 35
Цитата swetikccc ()
Не використовуючи циклів
З циклами задача проста, а от не використовувати цикли - то вже головний біль. Є обмеження на введене число? Яким чином організувати виведення, якщо число досить велике? Все одно повинен повторюватися оператор виведення, не писати ж його тисячу(умовно кажучи) разів у тексті програми? Гратися з динамічними масивами? Поки, що на думку не приходить нічого...
swetikccc Дата: Чт, 11.06.2015, 08:21 | Повідомлення № 85
Ветеран спілкування
Повідомлень: 4136
Нагороди: 31
Рейтинг: 387
Цитата Пилипчук_О_П ()
Сподіваюсь, goto і рекурсія теж не використовуються?

100% попадання.
Якраз з дітками вчили рекурсію, чудовий приклад на "занурення" функції в себе, також згадали були і "нехороший" goto. ;)
Для демонстрації рекурсії просто навожу вебку на монітор.
Bandalak Дата: Пт, 16.11.2018, 16:04 | Повідомлення № 86
Лідер форуму
Повідомлень: 6069
Нагороди: 43
Рейтинг: 276
Цікава задача:

Код
Скільки точок з цілочисельними координатами знаходиться у крузі радіусом r? Точка, що знаходиться на колі, вважається належною кругу. Центр кола має цілочисельні координати.
Вхідні дані
Цілочисельний радіус кола r (1 <= r <= 20000).
Вихідні дані
Вивести шукану кількість точок.
Приклад:
Вхідні дані Вихідні дані
2                  13

Я зробив методом прямого перебору.
Код
var x,y,r,k:longint;
begin
readln(r);
k:=0;
for x:=-r to r do
for y:=-r to r do
if x*x+y*y <= r*r then k:=k+1;
writeln(k)
end.

Але для великих радіусів програма виконується протягом неадекватно великого проміжку часу.

Підкажіть, будь-ласка, оптимізований алгоритм.
Прикріплення: 1497389.jpg(8.3 Kb)
vasmaz Дата: Пт, 16.11.2018, 18:49 | Повідомлення № 87
Часто заходить...
Повідомлень: 69
Нагороди: 2
Рейтинг: 16
На осях буде 4r+1 точка. В циклі порахувати точки тільки в І чверті координатної площини, які не лежать на осях (для 0<x<r, 0<y<r), помножити на 4 і додати точки на осях. Час виконання програми скоротиться.

Відредаговано: vasmaz - Пт, 16.11.2018, 18:49
Bandalak Дата: Пт, 16.11.2018, 19:29 | Повідомлення № 88
Лідер форуму
Повідомлень: 6069
Нагороди: 43
Рейтинг: 276
Цитата vasmaz ()
В циклі порахувати точки тільки в І чверті координатної площини

Думаю циклу достатньо одного. Наприклад х ганяти від 1 до R, а у рахувати по формулі половини рівняння кола і взяти цілу частину?
Bandalak Дата: Пт, 16.11.2018, 19:41 | Повідомлення № 89
Лідер форуму
Повідомлень: 6069
Нагороди: 43
Рейтинг: 276
Вийшло просто і красиво!
Код
[b]var x,y,r,k:longint;
begin
readln(r);
k:=0;
for x:=1 to r-1 do
    begin
         y:=trunc(sqrt(r*r-x*x));
         k:=k+y
    end;
writeln(4*k+4*r+1)
end.[/b]


vasmaz, дякую за ідею!
Пилипчук_О_П Дата: Сб, 17.11.2018, 12:18 | Повідомлення № 90
Ветеран спілкування
Повідомлень: 4268
Нагороди: 38
Рейтинг: 396
Цитата Bandalak ()
Підкажіть, будь-ласка, оптимізований алгоритм.

Цитата Bandalak ()
Наприклад х ганяти від 1 до R,

Від R зменшувати, доки знайдеться перша точка, що в колі. Її координата +1 - число точок у відповідному рядку.
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Розв'язування задач методами процедурного програмування (Розв'язки цікавих задач олімпіадного та шкільного рівнів.)
  • Сторінка 6 з 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Пошук:


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