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.Чи можна зберігати адреса структури в самій структурі?


 

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

83787. Учет организаций и ФЛ. Порядок постановки на учет и снятия с учета организаций и ФЛ. Идентификационный номер налогоплательщика 41.68 KB
  Порядок постановки на учет и снятия с учета организаций и ФЛ. Юридическое лицо становится субъектом налоговых отношений с момента его государственной регистрации вне зависимости от его постановки на налоговый учет с этого же момента возникает и налоговая обязанность. Постановка на учет в качестве налогоплательщика организации и индивидуального предпринимателя осуществляется вне зависимости от обстоятельств с которыми НК РФ связывает возникновение обязанности по уплате того или иного налога т. Фактически НК РФ называет субъект налоговых...
83788. Налоговая проверка как основной метод налогового контроля. Камеральная налоговая проверка 42.7 KB
  Посредством проведения налоговой проверки возможно сопоставление данных предоставленных налогоплательщиком в налоговый орган и тех фактов которые выявлены налоговым органом. Срок давности проведения налоговой проверки составляет три календарных года деятельности налогоплательщика плательщика сбора или налогового агента. Подобные процессуальные действия называются встречной налоговой проверкой. Однако не следует считать встречную проверку самостоятельным видом налоговых проверок поскольку ее назначение возможно исключительно в пределах...
83789. Выездная налоговая проверка: порядок проведения, оформление результатов 42.96 KB
  Выездная налоговая проверка проводится на территории в помещении налогоплательщика но в том случае если налогоплательщик не может предоставить помещение для проведения выездной проверки она проводится по месту нахождения налогового органа. В случае если налогоплательщик физическое лицо препятствует проведению проверки пп. Выездная проверка налогоплательщика проводится в течение 2 месяцев Срок проведения выездной проверки может быть продлен до 4 или 6 месяцев в следующих случаях: налоговый орган получил информацию которая...
83790. Порядок рассмотрения дел о налоговых правонарушениях. Вынесение решения по результатам рассмотрения материалов налоговой проверки 40.06 KB
  Руководитель заместитель руководителя налогового органа извещает о времени и месте рассмотрения материалов налоговой проверки лицо в отношении которого проводилась эта проверка. Неявка лица в отношении которого проводилась налоговая проверка его представителя извещенного надлежащим образом о времени и месте рассмотрения материалов налоговой проверки не является препятствием для рассмотрения материалов налоговой проверки за исключением тех случаев когда участие этого лица будет признано руководителем заместителем руководителя...
83791. Производство по делу о предусмотренных НК РФ налоговых правонарушений 43.36 KB
  При обнаружении фактов свидетельствующих о нарушениях законодательства о налогах и сборах ответственность за которые установлена НК РФ за исключением налоговых правонарушений дела о выявлении которых рассматриваются в порядке установленном статьей 101 НК должностным лицом налогового органа в течение 10 дней со дня выявления указанного нарушения должен быть составлен в установленной форме акт подписываемый этим должностным лицом и лицом совершившим такое нарушение. Если указанное лицо уклоняется от получения указанного акта...
83792. Налоговая тайна. Порядок получения информации, содержащей налоговую тайну 42.15 KB
  Порядок получения информации содержащей налоговую тайну. Налоговую тайну составляют любые полученные налоговым органом органами внутренних дел следственными органами органом государственного внебюджетного фонда и таможенным органом сведения о налогоплательщике за исключением сведений: 1 являющихся общедоступными в том числе ставших таковыми с согласия их обладателя налогоплательщика; 2 об идентификационном номере налогоплательщика; 3 о нарушениях законодательства о налогах и сборах и мерах ответственности за эти нарушения; 4...
83793. Взаимозависимые лица: общие положения 40.7 KB
  Взаимозависимыми для целей налогообложения являются: 1 организации в случае если одна организация прямо и или косвенно участвует в другой организации и доля такого участия составляет более 25 процентов; 2 физическое лицо и организация в случае если такое физическое лицо прямо и или косвенно участвует в такой организации и доля такого участия составляет более 25 процентов; На заметку Долей участия физического лица в организации признается совокупная доля участия этого физического лица и его родственников п. 3 организации в случае...
83794. Общие положения о ценах и налогообложении. Особенности признания цен рыночными для целей налогообложения 45.02 KB
  Для целей настоящего Кодекса цены применяемые в сделках сторонами которых являются лица не признаваемые взаимозависимыми а также доходы прибыль выручка получаемые лицами являющимися сторонами таких сделок признаются рыночными. При определении налоговой базы с учетом цены товара работы услуги примененной сторонами сделки для целей налогообложения далее в настоящем разделе цена примененная в сделке указанная цена признается рыночной если федеральным органом исполнительной власти уполномоченным по контролю и надзору в...