Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:


Симакович А.А. Лабораторная работа №7.Структуры. Вариант 8.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационных технологий и робототехники (ФИТР)

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

Отчет по лабораторной работе № 7

по дисциплине: ”Основы алгоритмизации и программирования”

на тему: ”Структуры ”

Вариант 8

Выполнил: ст. гр.107322 А.А.Симакович

                

Приняла: ст.пр. С.И.Пармон

Минск 2012

Лабораторная работа № 6. Структуры.

Цель работы: научиться работать со структурами и массивами структур.

Задание 1

Описать структуру с именем TRAIN, содержащую следующие поля:

название пункта назначения;

номер поезда;

время отправления.

Написать программу, выполняющую следующие действия:

ввод с клавиатуры данных в массив, состоящий из десяти структур типа TRAIN; записи должны быть упорядочены по времени отправления поезда;

вывод на дисплей информации о поездах, направляющихся в определенный пункт назначения (ввести с клавиатуры);

если таких поездов нет, вывести соответствующее сообщение.

Код программы:

#include <stdio.h>

#include <math.h>

#include <windows.h>

char buf[256];

char *rus(char *s) {CharToOem(s,buf); return buf;}

const unsigned int col = 10;

struct TRAIN{

char punktn[20];

unsigned int nomer;

unsigned int hour;

unsigned int min;

}trains[col];

void main()

{

for (unsigned int i=0;i<col;i++){ //ввод данных о поезде

printf(rus("Введите номер, пункт назначения, час и минуты отправления %u-го поезда.\n"),(i+1));

scanf("%u %s %u %u",&trains[i].nomer,&trains[i].punktn,&trains[i].hour,&trains[i].min);

}

unsigned int j;

TRAIN temp;

for (i=0;i<col;i++){ //сортировка по времени

for (j=i+1;j<col;j++){

if (trains[i].hour>trains[j].hour){

temp=trains[i];

trains[i]=trains[j];

trains[j]=temp;

}else if (trains[i].hour==trains[j].hour&&trains[i].min>trains[j].min){

temp=trains[i];

trains[i]=trains[j];

trains[j]=temp;

}

}

}     //окончание сортировки

char punkt[20];

bool ravn = false;

unsigned rez = 0;

printf(rus("Введите пункт назначения.\n"));

scanf("%s",punkt);

printf(rus("Поезда, следующие в этот пункт:\n"));

for (i=0;i<col;i++){

//printf(rus("%s,%s"),trains[i].punktn,punkt);

ravn=true;

for (j=0;j<20;j++){ //проверяем, есть ли такие поезда

if(isalpha(punkt[j])==false&&isalpha(trains[i].punktn[j])==false){break;}

if(trains[i].punktn[j]!=punkt[j]){ravn=false;break;}

}

if (ravn){

printf(rus("%3u - %10s - %2u:%2u.\n"),trains[i].nomer,trains[i].punktn,trains[i].hour,trains[i].min);

//выводим эти поезда

rez++;

//увеличивает количество результатов

}

}

if (rez==0){printf(rus("Поездов до указанного пункта не обнаружено.\n"));}

//соотв. сообщение в случае, если счетчик результатов равен нулю

}

Скриншоты результатов

Задание 2.

Описать структуру для хранения следующей информации (при необходимости используйте перечисления):

данные о недвижимости:

комната (площадь, к-во соседей, свободна(да/нет));

квартира (район (4 варианта), к-во комнат, площадь, этаж);

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

Создать массив из 5 таких структур.

Написать программу, выполняющую следующие действия:

добавление записи в массив; если в массиве нет места - вывести соответствующее сообщение;

удаление записи из массива; если такой записи нет - вывести соответствующее сообщение;

вывод всех записей массива.

Код программы

#include <stdio.h>

#include <math.h>

#include <windows.h>

char buf[256];

char *rus(char *s) {CharToOem(s,buf); return buf;}

struct Tkomnata{

float pl;

unsigned int sosedi;

bool svobodna;

};

struct Tkvartira{

unsigned int rayon;

unsigned int komnat;

float pl;

unsigned int etazh;

};

struct Tdom{

unsigned int rayon;

float plz;

float pl;

float procent;

};

struct Tnedv{

Tkomnata komnata;

Tkvartira kvartira;

Tdom dom;

bool clear;

}nedv[5];

void show(){

for (unsigned int j=0;j<5;j++){

 if (nedv[j].clear==false){

 printf(rus("Содержимое %u-ой ячейки массива.\n"),j);

 printf(rus("Площадь комнаты - %3.1f,к-во соседей - %u,комната свободна - "),nedv[j].komnata.pl,nedv[j].komnata.sosedi);

  if (nedv[j].komnata.svobodna)printf(rus("да.\n"));else printf(rus("нет.\n"));

 printf(rus("Площадь квартиры - %3.1f,к-во комнат - %u,этажей - %u,район - "),nedv[j].kvartira.pl,nedv[j].kvartira.komnat,nedv[j].kvartira.etazh);

 switch(nedv[j].kvartira.rayon){

 case 0:{printf(rus("Октябрьский.\n"));continue;}

 case 1:{printf(rus("Центральный.\n"));continue;}

 case 2:{printf(rus("Первомайский.\n"));continue;}

 case 3:{printf(rus("Советский.\n"));continue;}

 }

 printf(rus("Площадь дома - %3.1f,пл-дь застройки - %3.1f,проц.готовности - %3.1f,район - "),nedv[j].dom.pl,nedv[j].dom.plz,nedv[j].dom.procent);

 switch(nedv[j].kvartira.rayon){

 case 0:{printf(rus("Октябрьский.\n"));continue;}

 case 1:{printf(rus("Центральный.\n"));continue;}

 case 2:{printf(rus("Первомайский.\n"));continue;}

 case 3:{printf(rus("Советский.\n"));continue;}

 }

 }else printf(rus("Элемент массива под номером %u пуст.\n"),j);

 }

}

void add(){

unsigned int j;

for (unsigned int k=0;k<5;k++){

 if (nedv[k].clear){j=k;break;}

 }

 if (j>=5){printf(rus("В массиве нет места.\n"));return;}

 printf(rus("Введите площадь комнаты,к-во соседей,свободна ли комната(1-да,0-нет).\n"));

 scanf("%f %u %u",&nedv[j].komnata.pl,&nedv[j].komnata.sosedi,&nedv[j].komnata.svobodna);

 printf(rus("Введите площадь кваритры,к-во комнат,этаж,район (0 для Октябрьского,1 для Центрального,2 для Первомайского,3 для Советского).\n"));

 scanf("%f %u %u %u",&nedv[j].kvartira.pl,&nedv[j].kvartira.komnat,&nedv[j].kvartira.etazh,&nedv[j].kvartira.rayon);

 printf(rus("Введите площадь дома,пл.застройки,проц.готовности,район (0 для Октябрьского,1 для Центрального,2 для Первомайского,3 для Советского).\n"));

 scanf("%f %u %u %u",&nedv[j].dom.pl,&nedv[j].dom.plz,&nedv[j].dom.procent,&nedv[j].dom.rayon);

 nedv[k].clear=false;

}

void remove(){

unsigned int j;

 printf(rus("Введитен номер элемента для удаления.\n"));

 scanf("%u",&j);

 if (j<0||j>4||nedv[j].clear==true){printf(rus("Элемент отсутствует.\n"));return;}

 nedv[j].clear=true;

};

void main()

{

void show();

void add();

void remove();

unsigned int n;

for (unsigned int i=0;i<5;i++){nedv[i].clear=true;}

while(1){

 n=0;

 printf(rus("Введите действие. 1 - для вывода массива, 2 - для добавления элемента, 3 - для удаления элемента.\n"));

 scanf("%u",&n);

switch(n){

case 1:{show();continue;}

case 2:{add();continue;}

case 3:{remove();continue;}

}

}

}

Скриншоты результатов

Работа программы при попытке удалить несуществующий элемент или записать более, чем 5 элементов:

Работа программы для выведения данных, записи и удаления:

Вывод: Я научился работать со структурами и массивами структур.

7




1. Рыбников Алексей Львович
2. Методические рекомендации студентам по подготовке практических и контрольных работ по курсу ldquo;Росси
3. реферат дисертації на здобуття наукового ступеня кандидата економічних наук Дніпро
4. тематичних наук Львів 2001 Дисертацією є рукопис Робота виконана у відділі теорії мо.html
5. Алкоголизм наркомания табакокурение родителей как причина интеллектуальных нарушений их детей
6. Статья 110. Распределение взысканных денежных средств 1
7. Джерела кримінально-процесуального права
8. Разработка регулятора температуры обратной воды калорифера.html
9. тема основных понятий юриспруденции которые пронизывают все юридические науки.
10. КОНТРОЛЬНАЯ РАБОТА по дисциплине- Основы управления Вариант 3 Выпол
11. КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФГБОУ ВПО КубГУ Экономический факультет Кафедра экономич
12. Основы теории коммуникации- Теория коммуникации как наука.
13. 1933 гг. и его преодоление
14. ЛАБОРАТОРНА РОБОТА 33 Мета роботи- ознайомитись з первинними засобами пожежогасіння; дослідити та встанов
15. го столетия что является коренным отличием островного Просвещения от континентального
16. Shirt tht he liked. Michel Kors built up network of customers by selling clothes in trendy NYC boutique
17. КОНТРОЛЬНАЯ РАБОТА по дисциплине Страхование Вариант- 1 Выполнил- студент 5 курса
18. ймовірність збільшення або зменшення майбутніх економічних вигод та достовірна оцінка
19. Варіант 3 Так чи ні Боротьба з інфляцією і боротьба з безробіттям це взаємодоповнюючі цілі економічн
20. .ПР.15.ПЗ Лист Пров Ваганова ЮГ