ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Двонаправлений динамічний список
         

     

    Інформатика, програмування

    Завдання

    Реалізувати базу даних на основі двонаправленого динамічногосписку, що містить прізвище, ім'я, по батькові людини, дату його народження ізнак зодіаку за західним календарем.

    У програмному виробі передбачити роботу зі списком, якавключає в себе:
    1. Введення даних;
    2. Видалення даних зі списку;
    3. Виведення списку на дисплей;
    4. Сортування списку за прізвищем.

    Написати програмне виріб на двох мовах програмування: C,
    Pascal.

    Опис алгоритму програми зі структурою даних

    Взаємодія програми з користувачем повинно бути реалізовано занаступним алгоритмом:

    Вибір з головного меню однієї з наступних функцій: а) Додати; б) Видалити; в) Подивитися; г) Сортувати; д) Вихід.

    Після виконання кожної функції необхідно забезпечити повернення вголовне меню і вибір будь-якої іншої функції.

    Якщо вибрати "Вихід" робота програми завершується.

    Якщо вибрати «Додати», виділяється пам'ять для зберігання даних,потім користувачеві пропонується ввести прізвище, ім'я, по батькові і датународження людини, ці дані заносяться в пам'ять, після чого автоматичновизначається знак зодіаку за західним календарем і заноситься в пам'ять.

    При виборі функції «Видалити», перевіряється наявність даних у списку.
    Якщо список пустий, на дисплей виводиться відповідне повідомлення; інакшекористувачеві пропонується ввести прізвище, ім'я та по батькові особи, післячого відбувається його пошук у списку. Якщо дані на особу внесено досписок, то відбувається видалення цих даних і звільнення пам'яті; інакше надисплеї з'являється напис про їх відсутності.

    При виборі функції «Переглянути», звіряти наявність даних у списку.
    Якщо дані відсутні, на дисплей виводиться відповідне повідомлення;інакше виводиться таблиця, що містить прізвище, ім'я, по батькові, дату народженнялюдини та її знак зодіаку за західним гороскопом.

    При виборі функції «Сортувати», відбувається сортування списку запрізвища. Якщо в списку зустрічаються дві однакові прізвища, тодіпорівнюються імена; при збігу імен порівнюються по батькові.

    Опис програми

    Для реалізації динамічного списку в програмі застосований типпокажчиків, що вказує на запис "Inform", що містить прізвище "fam", ім'я
    "Name", по батькові "fanem", день народження "bethday", знак зодіаку "zodiak" іпокажчики на наступний "next" і попередній "prev" елементи списку.

    За допомогою цього типу "Ukazat" описані змінні: "temp" - длязберігання покажчика на поточний елемент; "first" - для зберігання покажчика наперший елемент у списку; "cut" - для зберігання на останній елемент усписку. Змінна "ch" використовується для вибору процедури; "s1", "s2", "n"
    - Для обчислення знаку зодіаку, "m" - для перевірки умови, при сортуванні;
    "Ffam", "fname", "ffanem" - для тимчасового зберігання прізвища, імені,по батькові, при видаленні елемента зі списку.

    Програма починає виконуватися з присвоєння вказівником на першійелемент (first) значення "nil". Після цього користувачеві пропонуєтьсявибрати дію: «1-Додати», «2-Видалити», «3-Подивитися", "4 -
    Сортувати »,« 0-Вихід ». Залежно від того, яку дію виберекористувач, почне виконуватися та чи інша процедура, або відбудетьсявихід з програми. Це реалізовано за допомогою операції вибору "case". Післявиконання деякої процедури користувачеві знову пропонується вибрати однуз вищевказаних дій, поки не вийдете з програми. Цереалізовано за допомогою циклу "repeat until".

    Процедура долучення "Dobav".

    Спочатку виділяється пам'ять під поточний елемент (new (temp)), потім уцей елемент записується прізвище, ім'я, по батькові та дата народження. За датоюнародження обчислюється знак зодіаку. Для цього в s2 записується числонародження, а в s1 перші три букви місяця народження, потім, шляхом порівнянняцих критеріїв, числами і частинами слів знаходиться відповідний знакзодіаку, і заноситься в поточний елемент. Після введення інформації, перевіряєтьсянаявність елементів у списку. Якщо вони відсутні, то в поточному елементі,вказівниками на наступний (next) і попередній (prev) елементи присвоюєтьсязначення "nil"; а покажчик на сам елемент (temp) присвоюється вказівникамина перший (first) і останній (cut) елементи у списку. Якщо список непорожній, то в поточному елементі, вказівником на наступний елемент (next)присвоюється значення "nil", а вказівником на попередній елемент (prev)присвоюється покажчик на останній елемент (cut) у списку, а вказівником нанаступний елемент (next) останнього елемента в списку і вказівником наостанній елемент (cut) присвоюється вказівник на поточний елемент (temp).
    Після чого процедура додавання завершується.

    Процедура видалення "Udal".

    У цій процедурі спочатку перевіряється наявність елементів у списку. Якщосписок порожній, то з'являється повідомлення: «Таблиця порожній». Якщо ж списокмістить елементи, то користувачеві пропонується ввести прізвище, ім'я тапо батькові що видаляється, записуючи їх у ffam, fname, ffanem відповідно.
    Після відбувається пошук видаляється елемента в списку. Це реалізовано здопомогою циклу, що виконується, поки елемент не знайдено або непередивлятися весь список. Якщо шуканий елемент відсутній, то виводитьсяповідомлення: «Такого немає». Якщо ж шуканий елемент знайдений, то поточнийпокажчик (temp) показує на нього, і походить його видалення.

    Якщо покажчики на перший (first) і останній (cut) елементи не рівні,то відбувається пошук місцезнаходження елемента в списку. Якщо у поточномуелемента вказівник на попередній елемент (prev) дорівнює nil, тоді вказівникомна попередній елемент (prev) всередині наступного за поточним елементомприсвоюється вказівник на попередній елемент у поточному, а вказівникомна перший елемент (first) у списку присвоюється покажчик на наступнийелемент. Якщо всередині поточного елемента вказівник на наступний елемент
    (next) дорівнює nil, тоді вказівником на наступний елемент (next) всерединіпопереднього перед поточним елементом присвоюється покажчик на наступнийелемент у поточному, а вказівником на останній елемент (cut) у спискуприсвоюється вказівник на попередній елемент. Якщо поточний елементвиявився «всередині» списку, тоді вказівником на наступний елемент (next)усередині попереднього перед поточним елементом присвоюється вказівник нанаступний елемент у поточному, а вказівником на попередній елемент (prev)всередині наступного за поточним елементом присвоюється вказівник напопередній елемент у поточному.

    Якщо ж покажчики на перший (first) і останній (cut) елементи рівні,то вказівником на перший елемент у списку (first) присвоюється nil.

    Після деяких перетворень усередині списку відбувається вивільненняпам'яті поточного елементу (dispose (temp)). На цьому процедура видаленнязавершується.

    Процедура перегляду "Prosm".

    Ця процедура виконує висновок вмісту списку у вигляді таблиці.

    Спочатку на дисплей виводиться шапка таблиці, що містить: «Прізвище Назва
    По-батькові »,« Дата народження »та« Знак зодіаку ». Після виведення шапки перевіряєтьсянаявність елементів у списку.

    Якщо список містить елементи, то відбувається їх порядковий висновок. Цереалізовано за допомогою циклу, що виконується, поки вказівник на поточнийелемент (temp) не перебере всі елементи списку. У циклі обчислюється довжинапрізвища, імені та по батькові, після чого вони виводяться на дисплей, а за нимививодяться дата народження та знак зодіаку, потім вказівником на поточний елемент
    (temp) присвоюється покажчик на наступний за ним елемент.

    Якщо список виявиться порожній, то з'являється повідомлення: «Таблиця порожня».

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

    Процедура сортування "Sortir".

    Для цієї процедури застосована локальна змінна "tmp" типу "ukazat".
    Тут спочатку перевіряється наявність елементів у списку.

    Якщо список містить елементи, то змінної "m" присвоюєтьсязначення "true", потім виконується цикл, поки "m = true". У циклі змінної
    "M" присвоюється значення "false", вказівником на поточний елемент (temp)присвоюється вказівник на перший елемент у списку (first), і виконуєтьсявкладений цикл, поки вказівник на наступний елемент у поточному НЕдорівнює "nil". У цьому циклі перевіряється який елемент більше.

    Якщо поточний елемент виявиться більше ніж наступний за ним елемент,тоді змінної "m" присвоюється значення "true", і перевіряєтьсямісцезнаходження поточного елемента в списку. Якщо він виявиться на початкусписку, то вказівником на перший елемент у списку (first) присвоюєтьсяпокажчик на наступний елемент за поточним, а інакше вказівником на наступнийелемент (next) всередині попереднього перед поточним елементом присвоюєтьсяпокажчик на наступний елемент у поточному. Якщо ж поточний елементопиниться в кінці списку, тоді вказівником на останній елемент у спискуприсвоюється вказівник на поточний елемент, а локальної змінної "tmp"присвоюється значення "nil", а інакше вказівником на попередній елемент
    (prev) наступного елементу після наступного за поточним елементомприсвоюється вказівник на поточний елемент, а локальної змінної (tmp)присвоюється покажчик на наступний елемент після наступного за поточнимелементом. Після з'ясування місця розташування і виконання деяких команд,вказівником на наступний елемент після наступного за поточним елементомприсвоюється вказівник на поточний елемент, вказівником на попередній елементнаступного за поточним елементом присвоюється вказівник на попереднійелемент перед поточним; а всередині поточного елемента вказівником на попереднійперед поточним присвоюється покажчик на наступний елемент за поточним, івказівником на наступний елемент за поточним присвоюється локальназмінна "tmp". Якщо ж поточний елемент виявиться не більше ніж наступнийза ним елемент, тоді вказівником на поточний елемент (temp) присвоюєтьсяпокажчик на наступний за ним елемент (next). На цьому виконання вкладеногоциклу завершується.

    Змінній "m" знову присвоюється значення "false", а вказівником напоточний елемент (temp) присвоюється покажчик на останній елемент усписку (cut), і виконується ще один вкладений цикл, поки вказівник напопередній елемент у поточному не дорівнює "nil". У цьому цикліперевіряється який елемент менше.

    Якщо поточний елемент виявиться менше ніж попередній перед ним елемент,тоді змінної "m" присвоюється значення "true", і перевіряєтьсямісцезнаходження поточного елемента в списку. Якщо він виявиться в кінцісписку, то вказівником на останній елемент у списку (cut) присвоюєтьсявказівник на попередній елемент перед поточним, а інакше вказівником напопередній елемент (prev) всередині наступного за поточним елементомприсвоюється вказівник на попередній елемент у поточному. Якщо жпоточний елемент виявиться на початку списку, тоді вказівником на перший елементв списку присвоюється вказівник на поточний елемент, а локальної змінної
    "Tmp" присвоюється значення "nil", а інакше вказівником на наступний елемент
    (next) попереднього елемента перед попереднім до поточного елементаприсвоюється вказівник на поточний елемент, а локальної змінної (tmp)присвоюється вказівник на попередній елемент перед попереднім до поточногоелементу. Після з'ясування місця розташування і виконання деяких команд,вказівником на попередній елемент перед попереднім до поточного елементаприсвоюється вказівник на поточний елемент, вказівником на наступний елементпопереднього перед поточним елементом присвоюється покажчик на наступнийпісля поточного, а всередині поточного елемента вказівником на наступний елементприсвоюється вказівник на попередній елемент, і вказівником на попереднійелемент присвоюється локальна змінна "tmp". Якщо ж поточний елементвиявиться не менше ніж попередній перед ним елемент, тоді вказівником напоточний елемент (temp) присвоюється вказівник на попередній перед нимелемент (prev). На цьому виконання вкладеного циклу завершується.

    Якщо під час перевірки наявності елементів в списку виявиться, що вінпорожній, то з'являється повідомлення: «Таблиця порожня».
    Після завершення циклу або виведення повідомлення, процедура сортуваннязавершується.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status