Иллюстративный материал к лекциям по алгоритмизации и программированию

Содержание

Слайд 2

Содержание 24.04.2016 Об авторе Текст программы Cхема алгоритма вычисления среднего возраста

Содержание

24.04.2016
Об авторе
Текст программы
Cхема алгоритма вычисления среднего возраста
Текст программы ввода данных
Cхема алгоритма

записи данных
Метод решения
Постановка задачи
Слайд 3

Постановка задачи Условие задачи Сохраним в файле следующие сведения о студентах

Постановка задачи

Условие задачи
Сохраним в файле следующие сведения о студентах некоторой

группы: фамилию, имя, возраст, рост.
Вычислим средний возраст студентов группы и определим самого высокого студента в группе.
  1) Постановка задачи
Исходными данными для этой программы являются сведения о студентах: фамилия, имя – строковые данные; возраст натуральное число, рост в метрах – действительное число. Все данные вводятся с клавиатуры.
Выходные данные – файл, содержащий сведения, средний возраст студентов – действительное число, фамилия, имя – строковые данные, рост самого высокого студента в группе –действительное число. Сведения о самом высоком студенте выводятся на экран
Слайд 4

Метод решения Для организации такого списка студентов создадим тип student, представляющий

Метод решения

Для организации такого списка студентов создадим тип student, представляющий собой

структуру с соответствующими полями:
фамилия - строковое поле;
имя - строковое поле;
возраст – поле целого положительного типа,
рост в метрах– действительное число.
Сведения о студентах сохраним в файле group.dat. Тип элементов этого файла – student.
Разделим решение этой задачи на две независимые подзадачи:
ввод данных о студентах и запись этих данных в файл;
вычисление среднего возраста и определение самого высокого студента в группе на основании данных из файла.
Слайд 5

Метод решения. Подзадача 1 (1 из 2) Основной целью этой подзадачи

Метод решения. Подзадача 1 (1 из 2)

Основной целью этой подзадачи является

организация диалога ввода исходных данных.
Сначала запрашивается количество студентов в группе (n).
Затем в цикле вводятся данные о каждом студенте.
Эти сведения заносятся в соответствующие поля переменной person типа student.
Для обращения к отдельному полю структуры person используются составные имена, например,
person.famil, person.rost и т.п.
Слайд 6

Метод решения. Подзадача 1 (2 из 2) Полностью сформированная запись об

Метод решения. Подзадача 1 (2 из 2)

Полностью сформированная запись об i-м

студенте сразу же записывается в файл с помощью одной операции записи.
Использование структурированного типа student делает возможным осуществлять запись в файл всех сведений о студенте за одну операцию записи.
После записи в файл сведений об i-ом студенте переменная person снова использовуется на следующем шаге цикла для сбора сведений об (i+1) – ом студенте.
Т.о. не требуется массива структур для хранения данных о группе в целом. Хранилищем сведений о группе является файл
Слайд 7

Схема алгоритма записи данных Начало Запись в файл сведений о студентах

Схема алгоритма записи данных

Начало

Запись в файл сведений о студентах

n

Сколько человек в

группе?

Открытие файла

1

Введите данные о студенте: фамилию, имя, возраст, рост

i=1,n

person

Запись person

Конец

1

Слайд 8

Текст программы ввода данных (1 из 2) int main() { struct

Текст программы ввода данных (1 из 2)

int main()
{
struct student{

char famil[20];
char name[15];
unsigned int let;
float rost;
};
int i,n;
student person;
FILE *group;
char* file_name="gruppa.dat";
group=fopen(file_name,"w");
cout<<"Сколько человек в групе?";
cin>>n;
fflush(stdin); //очистка буфера входного потока
Слайд 9

Текст программы ввода данных (2 из 2) cout cout for(i=1;i {cout

Текст программы ввода данных (2 из 2)

cout<<"Введите данные о студнте:";
cout<<"фамилия, имя,возраст,

рост";
for(i=1;i<=n;i++)
{cout<<”\n”< cin>>person.famil;
cin>>person.name;
cin>>person.let;
cin>>person.rost;
fwrite(&person, sizeof(student),1,group);
}
fclose(group);
}
Слайд 10

Метод решения. Подзадача 2 (1 из 4) Исходные данные для второй

Метод решения. Подзадача 2 (1 из 4)

 Исходные данные для второй задачи

вводятся из файла group.dat.
Сведения из файла считываются последовательно по одной записи о студенте за одну операцию чтения. Так повторяется пока не будет достигнут конец файла. Т.о. процесс считывания записей из файла циклический.
Средний возраст студентов в группе определяется по формуле
, где wi – возраст i-ого студента, n – количество студентов в группе
Слайд 11

Метод решения. Подзадача 2 (2 из 4) Для определения самого высокого

Метод решения. Подзадача 2 (2 из 4)

Для определения самого высокого в

группе будем сравнивать рост i-ого студента, сведения о котором прочитали из файла на текущем шаге цикла, с ростом самого высокого из уже прочитанных ранее из файла сведений.
Если рост i-ого оказался больше того значения, которое считалось максимальным до этого, то его значение запоминаем как самый высоких рост, а также запоминаем номер его записи в файле - k .
Слайд 12

Метод решения. Подзадача 2 (3 из 4) Таким образом, в теле

Метод решения. Подзадача 2 (3 из 4)

Таким образом, в теле цикла

выполняются следующие действия:
считывание данных об очередном студенте в переменную person, вывод на экран сведений о нем,
добавление его возраста к суммарному возрасту группы,
сравнение роста данного студента с ростом других уже просмотренных студентов.
Кроме того, имеется счетчик студентов i.
Слайд 13

Метод решения. Подзадача 2 (4 из 4) Считывание записи из файла

Метод решения. Подзадача 2 (4 из 4)

Считывание записи из файла

в переменную person осуществляется за одну операцию чтения (так же как и запись), а при выводе на экран нужно обратиться к каждому полю записи отдельно.
После просмотра всех записей указатель файла переводится на запись с номером k, производится считывание и вывод на экран сведений о самом высоком студенте в группе.
Слайд 14

Схема алгоритма вычисления среднего возраста

Схема алгоритма вычисления среднего возраста

Слайд 15

Схема алгоритма вычисления среднего возраста

Схема алгоритма вычисления среднего возраста

Слайд 16

Текст программы (1 из 4) #include #include #include #include int main()

Текст программы (1 из 4)

#include
#include
#include
#include
int main()
{

struct student
{
char famil[20]; //фамилия
char name[15]; //имя
unsigned int let; //возраст
float rost; // рост
} ;
Слайд 17

Текст программы (2 из 4) student person; FILE *group; int i,k,ws;

Текст программы (2 из 4)

student person;
FILE *group;
int i,k,ws;
float

dl;
cout<<"\n Сведения о студентах группы";
//открытие файла для чтения
group=fopen("gruppa.dat","r");
i=0; dl=0; ws=0;
Слайд 18

Текст программы (3 из 4) while (!feof(group)) // достигнут конец файла

Текст программы (3 из 4)

while (!feof(group)) // достигнут конец файла
{ // считывание

записи из файла
 fread(&person,sizeof(person),1,group);
if (feof(group)) break;
++i; //счетчик студентов
ws=ws+person.let; //суммарный возраст
if (person.rost>dl) { dl=person.rost; k=i-1; }
//вывод на экран
cout<<"\n"<cout<<", vozrast- "<}
Слайд 19

Текст программы (4 из 4) float sr=ws/(i); cout long p=k*sizeof(student)+1; fseek

Текст программы (4 из 4)

float sr=ws/(i);
cout<<"\n Средний возраст- "<long p=k*sizeof(student)+1;

 fseek (group,p,0);
fread(&person,sizeof(student),1,group);
cout<<"\n Самый высокий в группе - "<cout<<". Его рост- "<fclose(group); // {закрытие файла}
getch();
return 0;}