// pyramid_sort.cpp: определяет точку входа для консольного приложения.
//
#include “stdafx.h”
/*int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<locale.h>
struct Student
{
int key;
char FIO[50];
int year;
};
void adding(Student **mass, int p, int &l)
{
if (!l)
{
*mass = new Student[1];
printf(“Ключ:”);
scanf(“%d”, &(*mass[0]).key);
printf(“ФИО”);
scanf(“%s”, (*mass)[0].FIO);
printf(“Год рождения:”);
scanf(“%d”, &(*mass)[0].year);
printf(“Элемент добавленn”);
system(“pause”);
l++;
return;
}
if (p > l)
{
printf(“Ошибка”);
system(“pause”);
return;
}
Student *temp = new Student[l + 1];
for (int n = 0; n < l + 1; n++)
{
if (n < p)
{
temp[n].key = (*mass)[n].key;
strcpy(temp[n].FIO, (*mass)[n].FIO);
temp[n].year = (*mass)[n].year;
}
else if (n == p)
{
printf(“Ключ:”);
scanf(“%d”, &temp[n].key);
printf(“ФИО”);
scanf(“%s”, temp[n].FIO);
printf(“Год рождения:”);
scanf(“%d”, &temp[n].year);
}
else
{
temp[n].key = (*mass)[n – 1].key;
strcpy(temp[n].FIO, (*mass)[n – 1].FIO);
temp[n].year = (*mass)[n – 1].year;
}
}
printf(“Элемент добавленn”);
system(“pause”);
l++;
*mass = temp;
}
void deleting(Student **mass, int p, int &l)
{
if (p > l)
{
printf(“Ошибка”);
system(“pause”);
return;
}
Student *temp = new Student[l – 1];
for (int n = 0; n < l; n++)
{
if (n < p)
{
temp[n].key = (*mass)[n].key;
strcpy(temp[n].FIO, (*mass)[n].FIO);
temp[n].year = (*mass)[n].year;
}
else
{
temp[n].key = (*mass)[n + 1].key;
strcpy(temp[n].FIO, (*mass)[n + 1].FIO);
temp[n].year = (*mass)[n + 1].year;
}
}
printf(“Элемент удален”);
system(“pause”);
l–;
*mass = temp;
}
void change(Student **mass, int p, int &l)
{
if (p > l)
{
printf(“Ошибка”);
return;
}
Student *temp = new Student[l + 1];
for (int n = 0; n < l + 1; n++)
{
if (n != p)
{
temp[n].key = (*mass)[n].key;
strcpy(temp[n].FIO, (*mass)[n].FIO);
temp[n].year = (*mass)[n].year;
}
else
{
printf(“Ключ:”);
scanf(“%d”, &temp[n].key);
printf(“ФИО”);
scanf(“%s”, temp[n].FIO);
printf(“Год рождения:”);
scanf(“%d”, &temp[n].year);
}
}
printf(“Элемент изменен”);
system(“pause”);
*mass = temp;
}
void ShiftDown(Student* arr, int i, int j)
{
int temp;
int left = 2 * i + 1;
int right = left + 1;
int MaxChild = left;
while (MaxChild < j)
{
if (right < j)
{
if (arr[left].key < arr[right].key)
{
MaxChild = right;
}
}
if (arr[i].key < arr[MaxChild].key)
{
temp = arr[i].key;
arr[i].key = arr[MaxChild].key;
arr[MaxChild].key = temp;
}
else
{
break;
}
i = MaxChild;
left = 2 * i + 1;
right = left + 1;
MaxChild = left;
}
}
void Pyramid_Sort(Student* arr, int &l)
{
int i;
int temp;
for (i = l/ 2 – 1; i >= 0; i–)
{
ShiftDown(arr, i, l);
}
for (i = l – 1; i > 0; i–)
{
temp = arr[0].key;
arr[0].key = arr[i].key;
arr[i].key = temp;
ShiftDown(arr, 0, i);
}
}
void menu(int &stop, FILE *file, Student **mass, int &l)
{
int p = 0;
system(“cls”);
printf(“1 Ввести с клавиатурыn2 Добавить из файлаn3 Удалить по номеруn4 Изменить элементn5 Вывести на экранn6 Сортироватьn0 Выходn”);
p = char(_getch());
system(“cls”);
switch (p)
{
case 49:
{
if (!l)
{
adding(mass, 1, l);
break;
}
int p = 0;
printf(“Введите позицию нового элемента:”);
scanf(“%d”, &p);
if (!p)
{
printf(“Неверная позиция”);
system(“pause”);
break;
}
p–;
adding(mass, p, l);
break;
}
case 50:
{
char path[50];
printf(“Введите путь файла:”);
scanf(“%s”, &path);
if ((file = fopen(path, “r”)) == NULL)
{
printf(“Ошибкаn”);
system(“pause”);
break;
}
file = fopen(path, “r”);
while (!feof(file))
{
Student temp;
fread(&temp, sizeof(Student), 1, file);
if (!feof(file))
{
if (!l)
{
*mass = new Student[1];
mass[l]->key = temp.key;
strcpy(mass[l]->FIO, temp.FIO);
mass[l]->year = temp.year;
l++;
}
else
{
Student *tempM = new Student[l + 1];
for (int n = 0; n < l; n++)
{
tempM[n].key = (*mass)[n].key;
strcpy(tempM[n].FIO, (*mass)[n].FIO);
tempM[n].year = (*mass)[n].year;
}
tempM[l].key = temp.key;
strcpy(tempM[l].FIO, temp.FIO);
tempM[l].year = temp.year;
*mass = tempM;
l++;
}
}
}
system(“pause”);
fclose(file);
break;
}
case 51:
{
if (!l)
{
printf(“Список пуст”);
break;
}
int p = 0;
printf(“Введите элемент для удаления:”);
scanf(“%d”, &p);
p–;
deleting(mass, p, l);
break;
}
case 52:
{
if (!l)
{
printf(“Список пуст”);
break;
}
int p = 0;
printf(“Введите элемент для изменения:”);
scanf(“%d”, &p);
p–;
change(mass, p, l);
break;
}
case 53:
{
if (!l)
{
printf(“Список пуст”);
system(“pause”);
break;
}
printf(“l=%dn”, l);
for (int i = 0; i < l; i++)
{
printf(“%d %s %dn”, (*mass)[i].key, (*mass)[i].FIO, (*mass)[i].year);
}
system(“pause”);
break;
}
case 54:
{
if (!l)
{
printf(“Список пуст”);
break;
}
Pyramid_Sort(*mass, l );
printf(“Список отсортирован”);
system(“pause”);
break;
}
case 48:
{
stop = 1;
break;
}
default:
break;
}
return;
}
void main()
{
setlocale(LC_ALL, “RUS”);
FILE *file = NULL;
Student *mass = NULL;
int l = 0;
int stop = 0;
while (!stop)
menu(stop, file, &mass, l);
}
genik2019 4.4
От меня Вы получите качественную работу по актуальным источникам. Опыт работы с 2005 г. Два высших образования:история и культурология, менеджмент. Буду рад сотрудничеству.
На странице представлен фрагмент
Уникализируй или напиши новое задание с помощью нейросети
Похожие работы
Определить сопротивление растеканию сложного заземления
Определить сопротивление растеканию сложного заземления, состоящего из вертикальных стержневых заземлителей и горизонтальной полосы. Исходные данные принять по варианту, номер которого совпадает с последней...
3 Заносим числовые данные по задаче в 5 столбец и 6 столбец
3. Заносим числовые данные по задаче в 5 столбец и 6 столбец. Данные столбца 5 – это данные уровня притязаний, а столбца 6 – силы воли Кодируем переменные: для этого переходим с листа «представление...