Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Симакович А.А. Лабораторная работа №7.Структуры. Вариант 8.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Факультет информационных технологий и робототехники (ФИТР)
Кафедра программного обеспечения вычислительной техники
и автоматизированных систем
Отчет по лабораторной работе № 7
по дисциплине: ”Основы алгоритмизации и программирования”
на тему: ”Структуры ”
Вариант 8
Выполнил: ст. гр.107322 А.А.Симакович
Приняла: ст.пр. С.И.Пармон
Минск 2012
Лабораторная работа № 6. Структуры.
Цель работы: научиться работать со структурами и массивами структур.
Задание 1
Описать структуру с именем 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