Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки программирования на Turbo Pascal


Информационный Канал Subscribe.Ru


Уроки программирования на Turbo Pascal #14

Подписчиков на 2002-09-05 - 2277 человек(а).

Рассылка проекта "Олимпиада.com.ru".


Главная Архив задач Конкурс Обучение Рассылки Форум Контакты

Здравствуйте, уважаемые подписчики!


  На предыдущих уроках вы познакомились с операторами служащими для организации циклов. Сегодняшний урок мы посвятим решению задач связанных с проверкой различных свойств натуральных чисел. К натуральным относятся целые положительные числа.


Урок 13


Задача 1.
  Дано натуральное число N. Определить, является ли оно простым, т.е. делится нацело только на 1 и на само себя. (Мы решали эту задачу в 12 уроке, но я хочу предложить вам другой алгоритм решения.)
  Для решения необходимо проверить, делится ли исходное число на числа от 2 до N-1. Если число делится хотя бы на одно из чисел без остатка, то число N не будет простым. Мы можем уменьшить интервал проверяемых делителей так, как наибольший из возможных, это N/2. Введем так же дополнительную переменную F, она будет принимать значение 1, если обнаружится хотя бы один из делителей для исходного числа. Первоначально присвоим F значение 0, т.е. предположим, что число простое.
  Переменные:
N - исследуемое число;
I - переменная цикла;
F - вспомогательная переменная.

Код программы.

Var  I,n,f:word;   
Begin
  Write('Введите натуральное число');
  Readln(n);
  F:=0;
  For I:=2 to n div 2 do if n mod I=0 then f:=1;   
  If f=1 then writeln('число',n:6,' не простое')
  Else writeln('число',n:6,' простое');
  Readln
End.


  Количество выполнения циклов можно еще уменьшить. Ведь на самом деле если число N делится на какое-то число А без остатка (кроме 1 и самого себя), то оно имеет и второй делитель В=N/A, т.е. если число не простое то его всегда можно записать как N=A*B. При возрастании первого делителя, значение второго будет уменьшаться. Получается, что достаточно проверить все числа от 2 до SQRT(n), но так как результат вычисления корня вещественный, а параметр цикла должен иметь целое значение, применим функцию определения целой части числа TRUNC, и получим:

For I:=2 to trunc(sqrt(n)) do if n mod I=0 then f:=1;

Задача 2.
  Даны натуральные числа M и N. Определить, являются ли они взаимно простыми. Взаимно простые числа не имеют общих делителей, кроме 1.


  Для решения задачи:
- вводим натуральные числа М и N;
- в цикле от 2 до наименьшего числа порождаем I и проверяем, является ли оно одновременно делителем М и N;
- в зависимости от значения F выводим результат.

Var  k,m,n,f:word; 
Begin
  Write('Введите 2 натуральных числа');
  Readln(n,m);
  F:=0;
  if n>m then k:=m else k:=n; {k - наименьшее из 2-х чисел }
  for I:=2 to k do if (n mod I=0) and (m mod I = 0) then f:=1;
  If f=1 then writeln('числа не взаимно простые')
    Else writeln('числа взаимно простые');
  Readln
End.


Тренировочные задания.

1. Дан интервал натуральных чисел от N до М. Определить все простые числа в этом интервале.
2. Дано натуральное число N. Определить все простые числа не превосходящие N.
3. Дано натуральное число N. Разложить его на простые множители.
4. Дано натуральное число N. Определить, является ли оно совершенным. Совершенное число N равно сумме всех своих делителей, не превосходящих само N.
5. Дано натуральное число N. Определить, является ли оно автоаморфным. Автоаморфное число N равно последним разрядам квадрата этого числа: 5<->25, 6<->36, 25<->625.

Разбор заданий урока 13.

3. Распечатать в столбик таблицу умножения на 7.

var  i: byte;
begin
  for I:=1 to 10 do writeln(7,'*',I,'=',7*i);
  readln
end.


4. Вывести столбиком следующие числа: 2,1 2,2 2,3 . . . , 2,8

var  i: byte;
begin
  for I:=21 to 28 do writeln(i/10:0:1);
  readln
end.


5. Вывести столбиком следующие числа: 2,2 2,4 2,6 . . . , 4,0 4,2

var  i: byte;
begin
  for I:=11 to 21 do writeln(I*2/10:0:1);
  readln
end.


Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru
учитель информатики
гимназии №6, г. Междуреченск.


Архив рассылки:

  Архив предыдущих выпусков рассылки: http://subscribe.ru/catalog/comp.soft.prog.bpascal ;

Урок 1 Урок 2 Урок 3 Урок 4 Урок 5
Урок 6 Урок 7 Урок 8 Урок 9 Урок 10
Урок 11 Урок 12 Урок 13

Реклама в рассылке:

RLE    

  


Подпишитесь на наши рассылки:

Новости проекта "Олимпиада.com.ru" [Алексей Шамис]
Новости проекта "Olimpiada.com.ru". Новые темы на форуме. Информация о пополнениях в архиве задач. Оперативно и своевременно!

Уроки программирования на Turbo Pascal [Татьяна Ганилова]
Хотите стать Великим Программистом? Начните свой путь к вершине славы с изучения языка Turbo Pascal. Он как нельзя лучше подходит для начинающих программистов и в то же время используется для разработки сложных "профессиональных" программ.

Олимпиадные задачи с решениями на Turbo Pascal [Алексей Шамис]
В рассылке публикуются решения интересных олимпиадных задач различного уровня. Содержит много теоретической информации. Периодичность - 2-3 раза в неделю.

Задача в неделю. Олимпиадные задачи по информатике [Александр Алексеев]
Каждый понедельник в рассылке публикуется задача, которую необходимо решить и в следующий понедельник прислать программу на тестирование. Решения проверяются, и в пятницу публикуется разбор и итоги тестирования.



Всегда рады видеть Вас на нашем сайте. Жду ваших предложений и замечаний, Алексей Шамис

Copyright © 2002 by Tatyana Ganilova.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное