- •Т.Э. Шульга программирование.
- •Глава 1. Основы программирования на языке высокого уровня 6
- •Глава 2. Динамические структуры данных 40
- •Глава 3. Основы объектно-ориентированного программирования 53
- •Введение
- •Глава 1. Основы программирования на языке высокого уровня
- •Void main()
- •Задания
- •1.2. Переменные. Основные типы данных
- •Ввод – вывод значений переменных
- •Форматирование данных при обменах с потоками ввода-вывода
- •Void main()
- •Void main()
- •Преобразование типов
- •Задание 1. Описание переменных и преобразование типов
- •Задание 2. Форматирование вывода
- •1.3. Основные операции
- •Void main ()
- •Задания
- •1.4. Конструкции выбора
- •Void main()
- •Void main()
- •Void main()
- •Задание 1. Обработка введенного символа
- •Задание 2. Вычисление значения функции
- •Задание 3. Применение разветвляющихся алгоритмов при решении простейших задач
- •Задание 4. Mультиветвление
- •1.5. Конструкции цикла и передачи управления
- •Void main()
- •Задание 1. Детерминированные циклы. Простейшие задачи
- •Void main()
- •Задание 2. Итерационные циклы. Простейшие задачи
- •Void main()
- •Int last;
- •Задание 3. Одномерные массивы
- •Void main ()
- •Int a[100],n,max,imax;
- •Задание 4. Вложенные циклы
- •Void main ()
- •Задание 5. Двумерные массивы
- •Void main ()
- •Задание 6. Посимвольная обработка строк
- •Void main()
- •Задание 7. Сортировка массива
- •Void main ()
- •1.6.Функции
- •Int oct (int a)// определение функции
- •Void main()
- •Void main()
- •Int strcmp(const char *str1, const char* str2);
- •Int fclose (file * stream);
- •Int feof(file *stream);
- •Int fseek ( file* stream, long offset, int origin);
- •Задание 1. Определение и вызов функций
- •Задание 2. Рекурсивные функции
- •Задание 3. Использование библиотечных функций string.H
- •Void main()
- •Задание 4. Использование библиотечных функций stdio.H
- •Void main ()
- •Глава 2. Динамические структуры данных
- •Int year;
- •Int children;
- •Задание 1. Структуры
- •Int year;
- •Int month;
- •Int visokos(int year)
- •Vivod (date d)
- •Int day_number(date d)
- •Vivod(mas[I]);
- •Vivod (min(mas,n));
- •Задание 2. Динамический список
- •Int mark;
- •Void vvod ()
- •Void vivod()
- •If (begin)
- •Void vivod_f()
- •If (begin)
- •Void add()
- •Void udol () //
- •If (begin)
- •Void del()
- •Void main ()
- •Задание 3. Использование стеков и очередей
- •Глава 3. Основы объектно-ориентированного программирования
- •Void empty();
- •If (len) delete []s;
- •Void cStr::empty()
- •Задание 1 . Описание простейшего класса
- •Задание 2 . Класс string
- •Void main()
- •Void main ()
- •Задание 3. Класс fstream
- •Задание 4. Наследование
- •Список литературы
Задание 2. Динамический список
Пример. Ввести структуру СТУДЕНТ с полями ФАМИЛИЯ, ОЦЕНКА. Решить задачу, используя динамическую структуру однонаправленного списка. Составить и протестировать функции: создания списка на основе данных из файла, записи данных из списка в файл, добавления элемента в начало (конец) списка, удаления всего списка, вывода всего списка данных на экран в виде таблицы, удаления всех студентов, имеющих заданную оценку.
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
# include <iomanip.h>
# define dlin 20
struct student
{
char *fio;
Int mark;
student *next;
}* begin=NULL;
//----Функция создания списка на основе данных из файла----
//Предполагается, что фамилии и оценки студентов в файле
//введены на разных строках
Void vvod ()
{
char filename[50];
cout<< “Введите имя файла”;
cin>>filename;
FILE *fp= fopen(filename,"r");
if (fp!=NULL)
{
student *adr;
char f[dlin];
while(feof(fp)==0)
{
fgets(f, dlin, fp);
int l=strlen(f);
if (f[l-1]=='\n') f[l-1]='\0';
adr=new(student);
adr->fio=new (char [l+1]);
strcpy(adr->fio,f);
fscanf (fp, "%d ", &(adr->mark));
adr->next=begin;
begin=adr;
}
cout<<"Список создан";
}
else cout<<"Файла не существует";
}
//----------Функция вывода данных из файла на экран------
Void vivod()
{
If (begin)
{
student *adr;
cout.setf(ios::left);
//Вывод шапки талицы
cout<<"\n"<<setw(dlin+13)<<setfill('-')<<" ";
cout<<setfill(' ')<<"\n| # "<<setw(dlin+2)<<"| FIO"<<"|Mark"<<"|";
cout<<"\n"<<setw(dlin+13)<<setfill('-')<<" ";
adr=begin;
int k=1;
while (adr!=NULL) //Вывод списка
{
cout<<setfill(' ')<<"\n| "<<setw(3)<<k<<"| "<<setw(dlin)<<(adr->fio)<<"| "<<setw(3)<<adr->mark<<"|";
cout<<"\n"<<setw(dlin+13)<<setfill('-')<<" ";
adr=adr->next;
k++;
}
}
else cout<<"Списка не существует";
}
//-----------Функция вывода списка в файл ----------
//Фамилия и оценка студента выводятся на разные строки файла
Void vivod_f()
{
If (begin)
{
char filename[50];
cout<< “Введите имя файла”;
cin>>filename;
FILE *fp= fopen(filename,"w");
if (fp)
{
student *adr;
adr=begin;
while (adr!=NULL)
{
fputs(adr->fio, fp);
fputc('\n',fp);
fprintf (fp,"%d",adr->mark);
fputc('\n',fp);
adr=adr->next;
}
fclose (fp);
}
else cout<<"Запись невозможна";
}
else cout<<"Списка не существует";
}
//-----------Функция добавления элемента в список ---------
Void add()
{
student *adr;
char f[dlin];
adr=begin;
begin=new(student);
cout<<"\nEnter fio ";
gets(f);
begin->fio=new (char [strlen(f)+1]);
strcpy(begin->fio,f);
cout<<"\nEnter mark ";
cin>> begin->mark;
begin->next=adr;
}
//-----Функция удаления студентов, с заданной оценкой------
Void udol () //
{
If (begin)
{
int k;
cout<<"\nEnter mark ";
cin>>k;
student *adr;
//удаление найденных студентов из головы списка
while (k==begin->mark)
{
cout<<begin->fio<<" udal \n";
adr = begin;
begin=begin->next;
delete adr;
}
student *a;
adr=begin;
//удаление найденных студентов из головы списка
while (adr->next!=NULL)
{
if (k==adr->next->mark)
{
cout<<adr->next->fio<<" udal \n";
a=adr->next;
adr->next=adr->next->next;
delete a;
}
else adr=adr->next;
}
}
else cout<<"Списка не существует";
}
//-----------Функция удаления списка ----------