среда, 29 апреля 2020 г.

Многотабличные базы данных

Дистанционное обучение. Дата занятия 29.04.20-30.04.20
Срок выполнения задания (решение двух задач) 22:00 час 30.04.20

Почему бы не собрать все данные в одной таблице?
У однотабличной модели есть недостатки:

  • дублирование данных
  • при изменении каких-то данных может потребоваться изменение нескольких записей
  • нет защиты от опечаток
Однотабличная БД - это аналог картотеки, в которой все карточки имеют одинаковую структуру. А на практике в одной БД нужно хранить данные, относящиеся к объектам разных типов, которые связаны между собой.

Удобнее классифицировать сведения об объектах и создать несколько таблиц - для каждого класса. При создании многотабличной БД между таблицами устанавливаются связи. Связь устанавливается только между парой таблиц. Одна из таблиц такой пары называется главной таблицей, другая - подчиненной таблицей.
При создании связи ключевое поле главной таблицы связывается с полем подчиненной таблицы, которое называется внешним ключом.
А теперь посмотрим презентацию, в которой многотабличные БД рассмотрены более подробно.

В конце презентации находится задание, которое надо выполнить сегодня, до 22:00

вторник, 21 апреля 2020 г.

БД как модель предметной области

Дата проведения занятия 22.04.20 и 23.04.20

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И БД

В настоящее время для хранения, поиска, выдачи информации по запросам пользователя используются различные информационные системы.

Примеры информационных систем:
 - Справочная адресная служба большого города
 - Транспортная информационная система, обеспечивающая также и покупку железнодорожных и авиабилетов
- Информационно-поисковая система правового характера
Центральной частью любой информационной системы является база данных
База данных (БД) - это совокупность данных, организованных по определенным правилам, отражающая состояние объектов и их отношений в некоторой предметной области.

В середине ХХ века были предложены следующие принципы проектирования табличных БД:
  • Каждая таблица описывает один класс объектов;
  • Порядок расположения полей в таблице не имеет значения;
  • Все значения одного поля относятся к одному типу данных;
  • В таблице нет двух одинаковых записей;
  • Порядок расположения записей в таблице не имеет значения.

Поэтому можно дать следующее определение.
Реляционная БД - это БД, которую можно представить в виде набора таблиц с установленными между ними связями.

Система управления БД (СУБД) - это программное обеспечение для создания баз данных, хранения и поиска в них необходимой информации.

Для проектирования БД средней сложности наиболее часто используются Microsoft Access, OpenOffice.org Base, LibreOffice Base.

ОБЪЕКТЫ СУБД

Основными объектами СУБД являются:
  • Таблицы - это основной тип объектов. В таблицах хранятся данные.
  • Формы - это вспомогательные объекты. Они обеспечивают удобную работу с данными в таблице.
  • Запросы - это команды и результаты обращения пользователя к СУБД для поиска данных, сортировки, добавления, и удаления и обновления записей.
  • Отчеты - это документы, сформированные на основе таблиц и запросов и предназначенные для вывода на печать.

РЕЛЯЦИОННЫЕ БД

Реляционная БД может состоять из одной или нескольких взаимосвязанных таблиц.
Строка таблицы называется записью, столбец - полем.

Запись содержит информацию об одном объекте (Например, об одной книге в библиотеке)

Поле содержит информацию о значениях только одной характеристики объекта (Например, фамилия автора)
Поле БД имеет имя, тип, длину.
Тип поля определяется типом данных, которые в нем хранятся.
Поле или совокупность полей, значения которых в разных записях не повторяется (являются уникальными), называют ключом таблицы БД.

ТИПЫ ДАННЫХ БД

Основные типы полей:
  • числовой - для полей, содержащих числовую информацию. Длина поля - стандартная
  • текстовый - для полей, содержащих произвольные последовательности символов. Длина поля - это максимальное количество символов, которые можно записать в это поле
  • логический - для полей, данные которых могут принимать только 2 значения: ДА/НЕТ или 1/0. Длина поля - стандартная
  • дата - для полей, содержащих календарные даты. Длина поля - стандартная

ОТВЕТИТЬ НА ВОПРОСЫ ДО 22:00 23.04

Разбор WHILE5

WHILE5

Вычислить сумму 10-ти четных чисел начиная с 14, используя цикл while (т.е. 14 + 16 + 18 ...  - всего 10 чисел).

В while5 надо написать цикл. Требуется вспомогательная переменная, с помощью которой можно будет подсчитать сумму четных чисел (SUM). Изначально SUM = 0.

Начальное значение для переменной i должно быть равно 14. 

Далее начинается цикл (while (i < ?) do) //подобрать число, чтобы действительно складывалось ровно 10 четных чисел:
  в цикле проверяем, является ли текущее значение i - четным (if (i mod 2 = 0) then)
  если да, то увеличиваем значение переменной SUM - прибавляем к переменной суммы четное число (SUM := SUM + i)
  если нет, то ничего не делаем.
  Переходим к следующему значению i (i := i + 1)
На этом цикл заканчивается.

После цикла нужно вывести значение SUM.


Программа на языке Pascal:

var i, sum:integer;
  begin
  sum := 0; //задаем начальное значение накапливаемой переменной;
  i := 14; //задаем первое четное число 14
  while (i <= 32) do //начинается цикл
  begin
     if (i mod 2 = 0) then // если число четное
        sum := sum + i; //прибавляем его к сумме
    i := i + 1; //переходим к следующему числу
  end;
  writeln('sum = ', sum);
end.




























2 способ:

четные число отличаются друг от друга на 2.

var i, sum:integer;
  begin
  sum := 0; //задаем начальное значение накапливаемой переменной;
  i := 14; //задаем первое четное число 14
  while (i <= 32) do //начинается цикл
  begin
     sum := sum + i; //прибавляем четное число к сумме
    i := i + 2; //переходим к следующему четному числу
  end;
  writeln('sum = ', sum);
end.




вторник, 14 апреля 2020 г.

Цикл с предусловием while.

Дистанционное занятие 15.04-16.04. 2020
Выполнить задание до 22:00 16.04.2020


Продолжаем изучать цикл while. Для задач написать программу и нарисовать блок-схему.

Учителю отправить письмо . Тема письма - ДОТ2 информатика 8

либо
с программой, скриншотом программы и блок-схемой:
Имя программы - pas_while5_familia.pas
Имя скриншота с текстом и результатом программы - s_while5_familia.png


либо
с фотографиями программы и блок-схемой в тетради.

WHILE5

Вычислить сумму 10-ти четных чисел начиная с 14, используя цикл while (т.е. 14 + 16 + 18 ...  - всего 10 чисел).

Подсказка: для того, чтобы узнать, является ли число четным, надо узнать его остаток от деления на 2.

Подсказка2:

В while5 надо написать цикл. Требуется вспомогательная переменная, с помощью которой можно будет подсчитать сумму четных чисел (SUM). Изначально SUM = 0.

Начальное значение для переменной i должно быть равно 14. 

Далее начинается цикл (while (i < ?) do) //подобрать число, чтобы действительно складывалось ровно 10 четных чисел:
  в цикле проверяем, является ли текущее значение i - четным (if (i mod 2 = 0) then)
  если да, то увеличиваем значение переменной SUM - прибавляем к переменной суммы четное число (SUM := SUM + i)
  если нет, то ничего не делаем.
  Переходим к следующему значению i (i := i + 1)
На этом цикл заканчивается.

После цикла нужно вывести значение SUM.


*В данном случае SUM - накопляемая переменная. Изначально сумма равна 0, с каждым шагом цикла значение суммы увеличивается на четное число. Сумма накапливается.
**Есть второй способ, если придумать на какое число нужно каждый раз изменять Значение i , то можно обойтись без проверки на четность.

WHILE6

Вычислить произведение 5-ти нечетных чисел начиная с 7, используя цикл while (т.е. 7*9*... - всего 5 чисел).

Для желающих:

WHILE7

Ввести с клавиатуры 7 чисел. Сосчитать количество четных чисел  в последовательности.

Т.е. с клавиатуры вводится последовательность 3 7 5 4 9 10 24
В результате программа должна вывести: количество четных чисел = 3.

Подсказка:
внутри цикла while должна располагаться команда read(a), которая позволяет считать значение переменной с клавиатуры. Эта команда будет повторяться столько раз, сколько раз будет повторяться тело цикла. Пример, как это должно выглядеть:

...
while (условие) do
begin
  read(a);
  ... //необходимые действия для подсчета нечетного числа
end;

Если возникают вопросы или что-то не получается - пишите!

Разбор задач while2, while3, while4

WHILE2:

Задача while2 отличалась от задачи while1 только тем, что нужно было изменить порядок вывода чисел с 10 до 1. Для этого нужно было задать в качестве начального значения 10 и уменьшать значение переменной i на 1.


Алгоритм:
1. Объявить целочисленную вспомогательную переменную i, которая будет принимать значения от 10 до 1.
2. Определить начальное значение переменной i, равное 10.
3. До тех пор пока значение переменной i будет больше либо равно 1, выводить текущее значение i  и переходить к следующему (уменьшать значение переменно i на 1).

Программа на языке Pascal:

//Вывести числа от 10 до 1 через пробел
program while1;
var i:integer //целое число
begin
writeln('Вас приветствует программа Петрова П')
  i := 10;  //задать начальное значение переменной i
  while (i >= 1) do
  begin
      write (i, '   ');  //Вывод значений переменной i через пробелы
      i := i - 1;       //Уменьшение значения переменой i на 1
  end;
end.






WHILE3

Вычислить сумму и произведение чисел от 1 до 9.
В результате нужно получить значения выражений: 1+2+3+4+5+6+7+8+9 и 1*2*3*4*5*6*7*8*9

В данной задаче следовало создать две вспомогательные переменные: sum и proizv, а также переменную i, которая бы меняла свое значение от 1 до 9.

В цикле должны выполнятся следующие действия:
Переменная sum должна увеличиваться на значение i.
Переменная proizv должна умножаться на значение i.
Переменная i должна изменять свое значение на 1 для перехода к следующему числу.


Программа на языке Pascal:

//Вычислить сумму и произведение чисел от 1 до 9
program while3;
var i:integer //целое число
var sum, proizv:integer //вспомогательные переменные
begin
writeln('Вас приветствует программа Петрова П')
  i := 1;  //задать начальное значение переменной i
  sum := 0; //задать начальное значение sum. 0 не влияет на сумму
  proizv := 1; //задать начальное значение proizv. 1 не влияет на произведение
  while (i <= 9) do
  begin
     sum := sum + i; // Переменная sum увеличивается на значение i.
     proizv := proizv * i; // Переменная proizv умножается на значение i.
     i := i + 1;       //Увеличение значения переменой i на 1
  end;
  writeln ('1+2+3+4+5+6+7+8+9=', sum); //Вывод результата - значение переменной sum
  writeln ('1*2*3*4*5*6*7*8*9=', proizv); //Вывод результата - значение переменной proizv
end.



WHILE4
Дано целое число A. Если оно является степенью числа 4, то вывести "yes", иначе вывести "no".

В данном случае надо выяснить будет ли число делится на 4 без остатка до тех пор, пока не дойдем до 1.

То есть нам нужно взять число а, проверить остаток от деления на 4. Если остаток 0, то мы с помощью целочисленного деления div делим число на 4.

Почему нельзя использовать деление "/". дело в том, что при таком делении тип переменной а должен быть real, а значит мы не сможем проверять остаток от деления.


Программа на языке Pascal:

//Дано целое число A. Если оно является степенью числа 4, то вывести "yes", иначе вывести "no".
program while4;
var a:integer //целое число
begin
writeln('Вас приветствует программа Петрова П')
read (a); //считываем значение переменной а с клавиатуры
while (a mod 4 = 0) do //Пока остаток при делении a на 4 равен 0
   a:=a div 4; //Разделить a нацело на 4
if (a = 1) then write ('yes') //вывести yes, если дошли до 1
else write ('no'); //вывести no
end.

среда, 8 апреля 2020 г.

Программирование циклов с заданным условием.

Дата дистанционного занятия: 08.04.2020

Задание необходимо сделать и прислать учителю до 23:00 09.04.2020


СИНТАКСИС (СПРАВКА ПО ПАСКАЛЮ, ЦИКЛ С УСЛОВИЕМ)

Цикл - это одна из трех основных алгоритмических конструкций.
Цикл - многократное повторение некоторой последовательности действий

Команды, которые повторяются называются телом цикла. Однократное повторение тела цикла называется итерацией цикла.

Оператор цикла while имеет следующую форму:

while условие do
  оператор
Условие представляет собой выражение логического типа, а оператор после do называется телом цикла. Перед каждой итерацией цикла условие вычисляется, и если оно истинно, то выполняется тело цикла, в противном случае происходит выход из цикла.
Если вместо одного оператора в теле цикла требуется выполнить несколько операторов, то используется блок команд begin...end.
Если условие всегда оказывается истинным, то может произойти зацикливание:
while 2>1 do
    write(1);

Чтобы прервать зациклившуюся программу, выполняющуюся из интегрированной среды в режиме связи с оболочкой, следует использовать комбинацию клавиш Ctrl-F2 или пункт меню Программа/Завершить
Изменение логического условия  внутри цикла должен обеспечить программист!

Пример:

Вывести числа от 1 до 10 через пробел.

Задача состоит в том, что нужно вывести числа от 1 до 10 через пробел. 
То есть мы хотим получить следующую строчку:
1 2 3 4 5 6 7 8 9 10

Для выполнения таких задач мы можем 10 раз написать одну и ту же команду с разными значениями, а можем сократить программу и написать с программу с помощью цикла.

В данном случае мы создаем переменную, которая будет поочередно принимать все значения от 1 до 10.
Для этого мы сначала присваиваем этой переменной начальное значение 1, а после увеличиваем перед каждым повтором на 1. 
Чтобы было выведено 10 чисел от 1 до 10 нам нужно повторять такие действия 10 раз, или до тех пор? пока значение переменной i не станет больше 10.

Таким образом у нас получается следующий алгоритм:
1. Присвоить i значение 1.
2. До тех пор, пока i меньше или равно 10, выводим значение i на экран (команда write) и увеличиваем значение i на 1 (i := i+1).

Алгоритм:
1. Объявить целочисленную вспомогательную переменную i, которая будет принимать значения от 1 до 10.
2. Определить начальное значение переменной i, равное 1.
3. До тех пор пока значение переменной i будет меньше либо равно 10, выводить текущее значение i  и переходить к следующему (увеличивать значение переменно i на 1).

Программа на языке Pascal:


//Вывести числа от 1 до 10 через пробел
program while1;
var i:integer //целое число
begin
writeln('Вас приветствует программа Петрова П')
  i := 1;  //задать начальное значение переменной i
  while (i <= 10) do
  begin
      write (i, '   ');  //Вывод значений переменной i через пробелы
      i := i + 1;       //Увеличение значения переменой i на 1
  end;
end.









Переписать программу и перерисовать блок-схему к себе в тетрадь.  Набрать программу в среде pascalABC.NET (или в онлайн компиляторе www.ideone.com ). Сохранить программу под именем while1-familia.pas

Самостоятельная работа