Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Розробка тексту програми





Текст програми починаємо з включення файлу stdio.h.

Оскільки нам доведеться проводити порівняння (блок 15) поля name в елементах масиву, а це поле - символьний рядок, включаємо також файл string.h, де описані функції роботи з символьними рядками. На самому початку програми вводимо також опис структури mon і одночасно - оголошення масиву mm. Масив буде розміщений в статичній пам'яті.

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

Оголошення:

Float sqx;

ми прокоментуємо нижче.

Відкривається простий цикл з лічильником n, в кожній ітерації циклу виводиться запрошення і вводяться значення полів чергового елементу масиву. Порівняння поля name з константою "***" - ознакою кінця введення виконується за допомогою функції strcmp(). Якщо введена ознака кінця, відбувається достроковий вихід з циклу за оператором break.

Проте, слід зупинитися на введенні значення для поля sq. Тут ми зіткнулися з явищем, яке не можемо пояснити інакше, ніж помилкою в системі програмування: функція scanf() працює ненадійно при введенні значень типу float і double, якщо це - значення полів елементів масиву структур. Тому ми оголосили робочу змінну sqx типа float і значення поля sq спочатку вводиться в цю змінну, а потім привласнюється полю структури.

Виведення масиву складається з виведення заголовка як декількох рядків-констант і виведення в циклі рядків з фактичними даними.

Наступні оператори програми детально реалізують блоки 12 - 17 схеми алгоритму (для порівняння символьних рядків застосовується функція strcmp()). Детального розгляду вимагає тільки реалізація блоку 18 - перестановка елементів. По-перше, при перестановці використовується робоча структура x: спочатку вміст i-го елементу пересилається в x, потім вміст m-го елементу пересилається в i-ий елемент, а потім вміст x пересилається в m-ий елемент. По-друге, операція привласнення, яка звичайно застосовується для пересилки значень, не може застосовуватися до структури в цілому, так що привласнення відбувається для кожного поля окремо. До того ж, поле name є символьним рядком, а рядки теж не можуть привласнюватися прямо, а тільки - через функцію strcpy(). (Втім, для привласнення структур можна використовувати функцію пересилки в пам'яті - memcpy().)

Виведення таблиці-результату - такий же, як і початкової таблиці.

Повний текст програми приведений нижче.

#include "stdafx.h"

/********************************************************/

/* Лабораторна робота №3 */

/* Структури */

/* Приклад виконання. */

/********************************************************/

#include <stdio.h>

#include <string.h>

/* Опис структури, яка представляє монастир */

struct mon {

char name[15]; /* назва */

char sc; /* школа */

int cnt; /* кількість ченців */

float sq; /* площа */

} mm[10]; /* визначення масиву */

 

int _tmain(int argc, _TCHAR* argv[])

{

struct mon x; /* робоча змінна */

int n; /* кількість елементів в масиві */

int i, j; /* поточні індекси в масиві */

int m; /* індекс мінімального елементу */

float sqx;/* робоча змінна */

/* Введення даних */

for (n=0; n<10; n++){

printf("%d. Введіть: назву, школу, кількість, площу >",n+1);

scanf("%s",mm[n].name);

if (!strcmp(mm[n].name,"***")) break;

scanf("%s",&mm[n].sc);

scanf("%d",&mm[n].cnt);

/* Увага! Ми обходимо помилку в системі програмування */

scanf("%f",&sqx); mm[n].sq=sqx;

}

/* Виведення таблиці */

printf("+--------------------------------------------+\n");

printf("|Буддиські монастирі Японії перiода Нару |\n");

printf("|--------------------------------------------|\n");

printf("| Назва | Школа |Кількість | Площа |\n");

printf("| | | ченців | земель(га) |\n");

printf("|-----------|-------|----------|-------------|\n");

/* виведення рядків фактичних даних */

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

printf("| %9s | %c | %3d | %-5.1f |\n",

mm[i].name,mm[i].sc,mm[i].cnt,mm[i].sq);

printf("---------------------------------------------\n");

/* сортування масиву */

for (i=0; i<n-1; i++) {

m=i; /* мінімальний елемент - перший */

for (j=i+1; j<n; j++)

/* якщо поточний елемент > мінімального,

він стає мінімальним */

if (strcmp(mm[m].name,mm[j].name)>0) m=j;

if (m>i) {

/* перестановка першого і мінімального елементів */

strcpy(x.name,mm[i].name);

x.sc=mm[i].sc;

x.cnt=mm[i].cnt;

x.sq=mm[i].sq;

strcpy(mm[i].name,mm[m].name);

mm[i].sc=mm[m].sc;

mm[i].cnt=mm[m].cnt;

mm[i].sq=mm[m].sq;

strcpy(mm[m].name,x.name);

mm[m].sc=x.sc;

mm[m].cnt=x.cnt;

mm[m].sq=x.sq;

}

}

/* Виведення таблиці */

printf("*-------------------------------------------*\n");

printf("|Буддиські монастирі Японії перiода Нара |\n");

printf("|-------------------------------------------|\n");

printf("| Назва | Школа |Кількість | Площа |\n");

printf("| | | ченців | земель(га) |\n");

printf("|-----------|-------|----------|------------|\n");

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

printf("| %9s | %c | %3d | %-5.1f |\n",

mm[i].name,mm[i].sc,mm[i].cnt,mm[i].sq);

printf("---------------------------------------------\n");

return 0;

}

4. Відлагодження програми

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

Найскладнішою може бути відладка тієї частини програми, яка виконує сортування масиву. Перегляд всього масиву структур засобами відладчика системи програмування хоча і можливий, але може бути достатньо громіздким. Тому краще при помилках в цій частині програми вставити проміжні виведення - наприклад, виводити всю таблицю після кожного циклу сортування. У покроковому режимі можна спостерігати значення знайденого мінімуму в кожному циклі.

Date: 2016-07-25; view: 251; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию