Динамічний розподіл пам’яті

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
РТ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2017
Тип роботи:
Лабораторна робота
Предмет:
Інформаційні технології

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет "Львівська політехніка"  Лабораторна робота №13 Динамічний розподіл пам’яті Мета роботи: освоїти розміщення даних в оперативній пам’яті, динамічне виділення пам‘яті. Завдання: Написати програму, яка реалізовує: 1. Ввід даних (згідно варіанту) по кожному елементу списку 2. Обробку даних згідно методу, обраного користувачем 3. Вивід результатів. При вводі даних необхідно реалізувати зчитування введених даних з клавіатури, виділення необхідної пам‘яті та запит про завершення вводу. Користувач повинен мати можливість вибору методу обробки даних і вибору завершення роботи Якщо користувачем обрано завершення роботи, то перед завершенням роботи необхідно звільнити пам’ять, виділену під роботу програми. Індивідуальне завдання: Дані елемента списку Дані про студента: 1. Прізвище 2. Ім‘я 3. Група 4. № кімнати в гуртожитку (ціле число; 0-якщо студент не проживає в гуртожитку) 5. Рейтинг(дійсне число 0-100 ) Сортувати за: 1.Прізвищем 2.Ім’ям 3.Номером кімнати гуртожитка 4.Рейтингом Аналіз завдання: Для зручності організації даних я використаю структуру, в якій будуть всі дані для певного студента. Для економії пам’яті я використаю функцію mallock - динамічний розподіл пам’яті. Перед використанням функції scanf потрібно очистити пам’ять функцією fflush(stdin) для забезпечення правильної роботи програми. Алгоритм програми:   Текст програми: #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 20 struct Klass { char surname[20]; char name[10]; char gr[5]; int hurt; unsigned int rating; }; void getBoards(struct Klass **); void printBoards(struct Klass **); void Sortsurname(struct Klass **,unsigned n); void Sorthurt(struct Klass **,unsigned n); void Sortrating(struct Klass **,unsigned n); int main() { char key; unsigned size; unsigned i,j=0; printf("Vvedit’ chuslo ludey:\n=> "); scanf("%u", &size); size = ((size <= MAX_SIZE) ? (size): (MAX_SIZE)); struct Klass *ptr[size] ; struct Klass **pptr[size]; for(i=0;i<size;i++) { pptr[i]=&ptr[i]; ptr[i]=malloc(sizeof(struct Klass)); printf("People #%d. It remains to add another %d people\n",i+1,size-i-1) ; getBoards(pptr[i]); } system("cls"); puts("Sortuvatu?(y - yes, n - no)") ; scanf("%s",&key); if(key== 'y' ) { int m; do { puts("Jak sortuvatu?"); puts("_______________________"); puts("1 = sort by surname"); puts("2 = sort by hurtojutuk number"); puts("3 = sort by rating"); puts("4 = quit"); puts("_______________________"); scanf("%d",&m); switch(m) { case 1: puts("\tSort by surname"); for(j=0;j<size;j++) { for(i=0;i<size-1;i++) { Sortsurname(pptr[i],size); } } for(i=0;i<size;i++) { puts("____________________________"); printBoards(pptr[i]); puts("____________________________"); } break; case 2: puts("\tSort by hurt"); for(j=0;j<size;j++) { for(i=0;i<size-1;i++) { Sorthurt(pptr[i],size); } } for(i=0;i<size;i++) { puts("____________________________"); printBoards(pptr[i]); puts("____________________________"); } break; case 3: puts("\tSort by rating"); for(j=0;j<size;j++) { for(i=0;i<size-1;i++) { Sortrating(pptr[i],size); } } for(i=0;i<size;i++) { puts("____________________________"); printBoards(pptr[i]); puts("____________________________"); } break; case 4: puts("Enjoy!!! :-)"); for(i=0;i<size;i++) { free (ptr[i]); } break; } puts(""); }while(m!=4) ; } system("PAUSE"); return 0; } void Sortsurname(struct Klass **pptr,unsigned n ){ int i=0; struct Klass temp; for(i=0;i<n-1;i++) { if(strcmp ((*pptr)->surname, ( *(pptr+1))->surname ) >0 ) { temp=**(pptr); **(pptr)=**(pptr+1); **(pptr+1)=temp; } } } void Sorthurt(struct Klass **pptr,unsigned n ){ int i=0; struct Klass temp; for(i=0;i<n-1;i++) { if((*pptr)->hurt<(*(pptr+1))->hurt) { temp=**(pptr); **(pptr)=**(pptr+1); **(pptr+1)=temp; } } } void Sortrating(struct Klass **pptr,unsigned n ){ int i=0; struct Klass temp; for(i=0;i<n-1;i++) { if((*pptr)->rating<(*(pptr+1))->rating) { temp=**(pptr); **(pptr)=**(pptr+1); **(pptr+1)=temp; } } } void getBoards(struct Klass **ptr) { puts("Input surname"); scanf("%s",(*ptr)->surname); puts("Input name"); scanf("%s",&(*ptr)->name); puts("Input group"); scanf("%s",&(*ptr)->gr); puts("Input hurtojutok nomer"); scanf("%d",&(*ptr)->hurt); puts("Input rating"); scanf("%u",&(*ptr)->rating); puts(""); if((*ptr)->rating > 100) { puts( "The rating should be from "); puts( "0 to 100. Input again"); scanf("%u",&(*ptr)->rating); puts(""); } } void printBoards(struct Klass **pptr) { printf("Person's surname: %s\n",(*pptr)->surname); printf("Person's name : %s\n",(*pptr)->name); printf("Person's group : %s\n",(*pptr)->gr); printf("Person's hurtojutok: %d\n",(*pptr)->hurt); printf("Person's rating: %u\n",(*pptr)->rating); } Результати:       Висновок: на цій лабораторній роботі я навчився працювати з динамічним розподілом пам’яті, засвоїв функції для очищення і виділення пам’яті. Я написав програму, яка записує дані про студентів у структуру, виводить їхні дані та сортує їх за рейтингом, прізвищем та може показати тих студентів, які не проживають у гуртожитку. Користувач може вибрати вводити чи не вводити дані наступного студента та вибір типу сортування за даними студента.
Антиботан аватар за замовчуванням

20.04.2017 17:28

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!