17118

Використання покажчиків для роботи зі складеними типами даних

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 27 Тема: Використання покажчиків для роботи зі складеними типами даних Ціль роботи: виробити практичні навички у використанні покажчиків при роботі зі складеними комбінованими типами даних. Обладнання: ПКПО Borland C Теоретичні відомості ...

Украинкский

2013-06-29

98 KB

1 чел.

Лабораторна робота № 27

Тема: Використання покажчиків для роботи зі складеними типами даних

Ціль роботи: виробити практичні навички у  використанні покажчиків при роботі зі складеними (комбінованими) типами даних.

Обладнання: ПК,ПО Borland C++

Теоретичні відомості

Можна оголосити покажчики на структури й одержати доступ до дан-членів цих структур, використовуючи покажчики. С++ вимагає, щоб при цьому використовувалася операція доступу до покажчика (->) замість операції доступу (.) "крапка". Загальний синтаксис для оголошення покажчика на перемінну структурного типу той же, що і для звичайної перемінної.

Приклад оголошення покажчика на перемінн-структуру і використання його для доступу до дан-членів цієї структури.

Оголошення типу структури

Використання структур і покажчиків

за допомогою typedef struct myComplex

{

float my_real;

float my_mag;

} MyComp; // тип структури

// myComp і MyComp синоніми

void main()

{ myComp comvar={1.0, 2.8}

MyComplex * pComplex=&comlexvar;

cout <<"Complex number = "

<< pComp ->my_real

<< pComp ->my_mag;

}

У прикладі оголошена структура myComp чи MyComp із членами даних  my_real і my_mag типу float. У функції main() з'являється і ініціалізується перемінн-структура comvar. У функції також з'являється покажчик pComp на тип myComp і ініціалізується адресою перемінної compvar. При висновку в потік cout використовується операція -> для доступу за допомогою покажчика pComp до дан-членів my_real і my_mag перемінн-структури compvar.

Приклад

/*    ЗАНЯТТЯ N 15

  Розробив Петров Ю.В.

Оголосити структури і покажчики на них, виконати ініціалізацію.

Масив покажчиків на структурний тип ініціалізувати з

виділенням пам'яті в купі. Одержати доступ до елементів структур

с використанням покажчиків. Вивести значення елементів

масиву структур на екран із застосуванням функції. Структура

містить прізвище і дату народження (число, місяць, рік) студента.

Ввести інформацію про студентів і знайти дані про перший

у масиві структур студенті, що народився заданого числа.*/

#include <stdio.h>

#include <conio.h>

#define N 3

#define M 20

struct stud

 { char name[M];

   int  day,month,year;

 };

stud data[N];      //Глобальний масив з N структур типу stud

 //Функція пошуку даних у глобальний масиві data[і].day==j)

int poisk(int j);

//print_st() -Функція висновку елементів структури з глобального

void print_st(int num); //масиву, num -кол. структур для висновку

//init_loc() -функція для ініціалізація структури типу stud

stud *init_ptr(void);

void print_ptr(stud *);  //Функція висновку елементів структури

void main()

{ int i=0,j,a;      clrscr();

 stud arrloc[N];   //Масив з N структур

 stud *dloc[N];    //Масив покажчиків на структурний тип stud

 stud *pstr;       //Покажчик на структурний тип stud

 pstr=arrloc;      //Аналогічно pstr=&arrloc[0];

 while (a&&і<N)    //Введення елементів масиву структур arrloc[N]

  { printf("Уведіть прізвище студента      : ");

    scanf("%s",pstr->name);      fflush(stdin);

    printf("Уведіть дату народження(чч мм рр) : ");

    scanf("%d%d%d",&pstr->day,&pstr->month,&pstr->year);

 fflush(stdin);

   // printf("%-15s  - %2d.%2d. %4d\n",pstr->name,pstr->day,

   // pstr->month,pstr->year); //Контроль значень при введенні

    printf("t\t Продовжити введення ? y/n  ");

    char c=getche();             printf("\n");

    if (c=='n' || c=='N') a=0;

    pstr++;//Перехід до наступного структурі в масиві arrloc[N]

    і++;

  } //end while-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-

 printf("Висновок значень елементів масиву структур arrloc[і]\n ");

 printf("з використанням покажчика\n ");

 j=i; pstr=&arrloc[0];

 for(i=0;i<j;i++)

  { print_ptr(pstr);

    dloc[і] = new stud; //Виділення пам'яті для структури в "купі"

    dloc[і] = pstr;     //Ініціалізація елементів локального масиву

    pstr++;

  }

 printf("Уведення відсутніх значень елементів масиву структур\n ");

 printf("з використанням масиву покажчиків\n ");

 for ( і=j; і<N; і++)

     dloc[і]=init_ptr(); //Виділення пам'яті для структури у функції

 printf("Висновок значень елементів масиву структур\n ");

 printf("з використанням масиву покажчиків\n ");

 for ( і=0; і<N; і++)

  { print_ptr(dloc[і]);

    data[і] = *dloc[і]; //Ініціалізація елементів глобального

  }                     //масиву структур

 printf("Висновок (N-2) перших значень елементів глобального \

 масиву структур\n");

 print_st(N-2);

 printf("Уведіть день для пошуку першого в масиві структур \

 студента   : ");

 scanf("%d",&j);    fflush(stdin);

 a=poisk(j);

 if (a!=-1) print_ptr(&data[a]);

    else    printf("Немає таких студентів ");

 for ( і=0; і<N; і++)  delete dloc[і]; //Звільнення пам'яті в "купі"

 getch();

}//End main()----------------------------------------------------------

int poisk(int j)   //Функція пошуку даних (data[і].day==j)

 {int a=-1;        //у глобальному масиві структур data[і]

  for (int i=0; i<N; i++)

   if (data[i].day==j) {a=i; return a;}

  return a;

 }//-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і

 //print_st() -Функція висновку елементів структури з глобального

 void print_st(int num)            //масиву, num -кількість

 { for (int і=0; і<num; і++)      //структур для висновку

   printf("%-15s  - %2d.%2d.%4d\n",data[i].name,data[i].day,

   data[i].month,data[i].year);

 }//-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і

//init_loc() -функція для ініціалізація структури типу stud

stud *init_ptr(void)

 { stud *pst = new stud;      //Виділення пам'яті в "купі"

   printf("Уведіть прізвище студента        : ");

   scanf("%s",&pst->name);

   printf("Уведіть дату народження(чч мм рр) : ");

   scanf("%d%d%d",&pst->day,&pst->month,&pst->year);

   return pst;

 }//------------------------------------------------------------

void print_ptr(stud *pdt)  //Функція висновку елементів структури

 { printf("%-15s  - %2d.%2d.%4d\n",pdt->name,pdt->day,

   pdt->month,pdt->year);

 }//-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і

/* Уведіть прізвище студента        : Petrov

  Уведіть дату народження(чч мм рр) : 12 7 1980

  Продовжити введення ? y/n  y

  Уведіть прізвище студента        : Sidorov

  Уведіть дату народження(чч мм рр) : 24 8 1983

  Продовжити введення ? y/n  n

Висновок значень елементів масиву структур arrloc[і]

с використанням покажчика

Petrov           - 12. 7.1980

Sidorov          - 24. 8.1983

Уведення відсутніх значень елементів масиву структур

с використанням масиву покажчиків

  Уведіть прізвище студента        : Ivanov

  Уведіть дату народження(чч мм рр) : 24 5 1982

Висновок значень елементів масиву структур

с використанням масиву покажчиків

Petrov           - 12. 7.1980

Sidorov          - 24. 8.1983

Ivanov           - 24.5.1982

Висновок (N-2) перших значень елементів глобального масиву структур

Petrov           - 12. 7.1980

Sidorov          - 24. 8.1983

Уведіть день для пошуку першого в масиві структур студента : 24

Sidorov          - 24.8.1983           */

Приклад програми на С++

Скласти програму для збереження й обробки інформації яка включає різні типи даних. Індивідуальне завдання приведене в таблиці 3.2.

Варіант

Номер і зміст даних

1

2

3

4

5

6

7

6

Назва магазина

Вид товару

Адреса

Час роботи

Кількість продавців

Номер магазина

#include<iostream.h>

#include<math.h>

void H(char(*func1)(unsigned int*),char(*func2)(int*,float*,double*),char(*func3)(void*));

int*func4(char*be,int*b);

char f1(unsigned int*c);

char f2(int*d,float*e,double*f);

char f3(void*g);

void main()

{int r,*my=&r,y;

char p;

p='w';

y=54;

H(f1,f2,f3);

*my=*func4(&p,&y);

cout<<*my;

}

void H(char(*func1)(unsigned int*),char(*func2)(int*,float*,double*),char(*func3)(void*))

{int a2;

unsigned int a1;

float a4;

double a3;

void *a5;

char z1,z2,z3;

a1=12;

a2=10;

a3=3.5;

a4=8.1;

z1=(*func1)(&a1);

z2=(*func2)(&a2,&a4,&a3);

z3=(*func3)(a5);

cout<<z1<<' '<<z2<<' '<<z3<<'\n';

}

char f1(unsigned int*c)

{if (*c<10) return 'a';

 else return 'b';

}

char f2(int*d,float*e,double*f)

{if((*d>*e)&&(*f>0)) return'a';

 else return 'b';

}

char f3(void*g)

{return 'v';

}

int*func4(char*be,int*b)

{int a,*c=&a;

if(*be=='w') *c=*b;

 else *c=0;

return c;

}

Хід роботи

1.Вивчити теоретичні відомості.

2.Відповідно до індивідуального завдання розробити алгоритм рішення задачі. Оголосити комбіновані типи, масиви структур, покажчики на структуру. Використовувати покажчики як члени структури, а також для доступу до членів структури і роботи з ними. Оголосити об'єднання і виконати роботу з об'єднанням з використанням покажчиків. Результати ініціалізації, зміни членів комбінованих типів вивести на екран.

3.Розробити і набрати програму на комп'ютері, усунути помилки.

4.Одержати результат.

5.Оформити звіт.

6.Підготуватися до захисту лабораторної роботи, вивчивши контрольні питання по даній темі.

Вимоги до змісту звіту приведені в лабораторній   роботі   №1.

Індивідуальне завдання

Скласти програму для збереження й обробки інформації яка включає різні типи даних. Індивідуальне завдання приведене в таблиці 3.2.

Таблиця 3.2 - Індивідуальне завдання

Варіант

Номер і зміст даних

1

2

3

4

5

6

7

1

ФИО

Ріст

Вага

Рік народження

Підлога

Рейтинг

2

Назва ЕОМ

Тип процесора

Обсяг пам'яті

Тип дисплея

Кількість дисководів

Вартість

3

Тип автомобіля

Колір

Кількість коліс

Кількість місць

Вантажопідйомність

Вартість

4

Тип автобуса

Кількість місць

Вантажопідйомність

Номер маршруту

Пункт призначення

Час відправлення

5

ФИО

Номер школи

Клас

Середній бал атестата

Улюблений предмет

Нелюбимий предмет

6

Назва магазина

Вид товару

Адреса

Час роботи

Кількість продавців

Номер магазина

7

ФИО

Вид спорту

Особистий рекорд

Іноземна мова

Термін занять

Кількість знайомих слів

8

Назва фірми

Обсяг річного обороту

ФИО директора

Штат

Стаж роботи

Вік директора

9

ФИО

Наявність братів і сестер

Число

Місяць

Рік народження

Вага

10

Назва книги

Автор

Видавництво

Дата видання

Країна

Кількість сторінок

11

ФИО

Номер у групі

Назва групи

Курс

Оцінки

Рейтинг

12

Назва велосипеда

Кількість коліс

Діаметр коліс

Колір

Вантажопідйомність

Швидкість

13

Назва програмного продукту

Область застосування

Обсяг займаної пам'яті

Операційна система

Режим: текстовий чи графічний

Вартість

14

Назва доля групи

Дата створення

Стиль

Склад групи

Кількість альбомів

Вартість квитка

15

ФИО

Номер залікової книжки

Улюблений предмет

Оцінки по математиці

середній бал

Мова програмування

16

Назва журналу

Вік читачів

Кількість сторінок

Початок видання

Тираж

Передплатний індекс

17

Назва літака

Дальність польоту

Кількість місць

Кількість двигунів

Час вильоту

Час у повітрі

18

Назва праски

Ціна

Країна виробник

Вага

Температура

Наявність регулятора

19

Місто

Країна

Область

Поштовий індекс

Число жителів

Площа

20

Операційна система

Многозадачность

Обсяг пам'яті

Версія

Фірма розроблювач

Вартість

Контрольні запитання

1.Чи можна використовувати покажчики як дан-члени структур?

2.Чи можна використовувати масиви і структури як дан-члени структур (вкладені оголошення)?

3.Чи можна використовувати в якості вкладені структури що повідомляється (свого) типу, а також покажчики на структури свого типу?

4.Як оголосити покажчик на структуру, масив покажчиків на структури?  Чи існують різні варіанти оголошення?

5.Чи можна використовувати typedef для оголошення типу структури?

6.Як одержати доступ до елемента структури за допомогою покажчика?

7.Як здійснюється доступ до дан-членів структури при використанні масиву покажчиків на структури?

 8.Чи можна використовувати різні класи пам'яті стосовно до перемінних структурного типу?

 9.Чи обов'язково вказувати ключове слово struct при оголошенні структурного типу, перемінних структурного типу?

 10.Чи можна зберігати адреса структури в самій структурі?


 

А также другие работы, которые могут Вас заинтересовать

40987. Мова і культура 148.5 KB
  Однак з іншого боку у самій матерії мови у ряду істотних характеристик мовної структури позначилася біологічна природа людини. Психофізіологічні можливості знакової діяльності людини зумовили багаторівневу організацію мови визначили кількісні параметри окремих рівнів наприклад обсяг фонологічної системи що коливається в різних мовах в інтервалі від 10 до 100 одиниць; обсяг словника в інтервалі від 10 тисяч до півмільйона слів; вияв надмірності в мові. Культура визначає план змісту мови. У молекулярній біології і семіотиці був виявлений...
40988. Стратегии позиционирования в маркетинге, стратегия эффективного позиционирования, проблемы разработки стратегии позиционирования 233 KB
  Целью данной работы является детальное изучение понятия позиционирования в маркетинге и рассмотрение стратегий позиционирования. Для достижения поставленной цели мною решались следующие задачи: раскрытие понятия позиционирования, выявления ключевых концепций и идей позиционирования
40989. ПОЛІТИЧНА ЛІНГВІСТИКА. МОВНА ПОЛІТИКА 115.5 KB
  Потрыбно постійно памятати що будьяке рішення щодо мови це політичне рішення яке має прийматися при одночасному врахуванні обєктивних комунікативних потреб й механізму групової ідентифікації. Крисін ставлять перед собою і таке завдання: регулювати розвиток і функціонування мови мов не покладаючись цілком на самоплин мовного життяâ. На нашу думку не самі соціолінгвісти регулюють розвиток і функціонування мови чи мов у суспільстві а держава її владні інститути. Сьогодні вже можна говорити про чітко окреслену...
40990. Психологія стресу та його наслідки 80.5 KB
  Функції природа та фази стресу. Методи подолання стресу. Стан стресу може виникати під впливом найрізноманітніших життєвих умов починаючи із повсякденних турбот і закінчуючи екстремальними ситуаціями так званими ударами долі .
40991. Проектирование 2-х этажного пятикомнатного жилого дома 121 KB
  Однако на сегодняшний день ситуация на рынке малоэтажного строительства еще весьма неоднозначна. С одной стороны, есть огромный неудовлетворенный потенциальный спрос на загородное жилье у горожан, уставших от городского шума, плохой экологии и тесноты. С другой стороны, наблюдается явное несоответствие спроса и предложения на рынке.
40992. ПЛАНУВАННЯ НАВЧАЛЬНОГО ПРОЦЕСУ З ІНОЗЕМНОЇ МОВИ 153 KB
  Система планування в середній школі охоплює послідовне планування в межах усього курсу навчання чвертей циклу уроків та окремого уроку виходячи з конкретних цілей кожного відрізка навчального процесу. Вчитель повинен усвідомити призначення кожного елемента уроку його взаємодію з іншими елементами уроку. Підготовча робота вчителя до уроку здійснюється послідовно і включає: аналіз змісту матеріалу визначення типу уроку формулювання цілей уроку поетапний розподіл навчального матеріалу визначення часу на його опрацювання розробку...
40993. ЭКОНОМИЧЕСКАЯ ЭФФЕКТИВНОСТЬ ПРОИЗВОДСТВА КАРТОФЕЛЯ НА ПРИМЕРЕ СПК «КУШЛИКИ» 1.33 MB
  Дать организационно-экономическую характеристику СПК «Кушлики»; изучить экономическую эффективность отрасли картофелеводства и пути его повышения; дать характеристику экономической эффективности картофелеводства на примере СПК «Кушлики»; предложить мероприятия по повышению экономической эффективности производства картофеля.
40994. Міжнародні фінансові потоки 105.5 KB
  Офшорні зони в системі світових фінансових центрів. Міжнародні фінансові потоки Міжнародні фінансові потоки являють собою сукупність фінансових операцій обєктом яких є грошовий капітал. Типи міжнародних фінансових потоків можна класифікувати за такими ознаками: вид економічної діяльності згідно зі структурою платіжного балансу економічні взаємовідносини між нерезидентами строки виконання фінансових операцій форма власності щодо джерел фінансових потоків. Основними каналами руху фінансових потоків є: валютнокредитне і розрахункове...
40995. Міжнародний валютний ринок 238 KB
  Особливість цього ринку полягає в тому що він: нематеріальний; не має конкретного місцезнаходження єдиного центру; механізм його функціонування обмін валюти однієї країни на валюту іншої країни; існує цілковита свобода моментального відкриття чи закриття будьякої позиції можливість торгувати 24 години на добу в режимі on lin; є міжбанківським ринком; має гнучку систему організації торгівлі та гнучку стратегію оплати за укладення угоди; є одним з найліквідніших ринків завдяки можливості роботи на ньому з різними валютами;...