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

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

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

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

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

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

Міністерство освіти і науки України Національний університет "Львівська політехніка"  Лабораторна робота №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:04-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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