Додаток А. Рекомендації зі створення інтерфейсу

Додаток А. Рекомендації зі створення інтерфейсу#

Обкладинка програми#

Кожна програма повинна мати «обкладинку» вигляду, представленого на рисунку А.1. У кожній програмі потрібно вказати потрібні номер і тему роботи, групу, прізвище та ініціали студента, рік виконання роботи, вибрати правильну форму написання слова «виконав» залежно від статі студента.

Обкладинка програми

Рисунок А.1 – Обкладинка програми

Маніпуляції з консолью вимагають підключення додаткових бібліотек, що залежать від вашої операційної системи. Для Windows це може бути conio.h чи windows.h. На Linux та інших Unix-подібних системах традиційно використовують бібліотеку ncurses.

Для кросплатформенної розробки можна використовувати бібліотеку pdcurses.

Для створення обкладинки потрібно:

  1. Підключити бібліотеку stdio.h та бібліотеку для маніпуляцій консолью.

  2. Очистити екран.

  3. Для креслення рамки використайте символи з такими кодами ASCII:

  • 218 (лівий верхній кут),

  • 196 (горизонтальна лінія),

  • 191 (правий верхній кут),

  • 179 (вертикальна лінія),

  • 192 (лівий нижній кут),

  • 217 (правий нижній кут).

218

196

191

179

179

192

196

217

  1. Використовуйте функцію void gotoxy(int x, int y), яка поміщає курсор текстового екрана в точку з координатами х, у. (Стандартний розмір терміналу — 80 х 25.)

  2. Поставити очікування уведення будь-якого символу й вивести рядок, наприклад, "Для завершення натисніть Enter".

Організація простого меню#

Майже в усіх завданнях користувачу надають вибір із декількох варіантів. Наприклад, для демонстрації роботи програм можна використовувати випадкові числа, а можна — числа, уведені з клавіатури. Вибір користувача часто реалізують у вигляді меню. Просте меню виглядає так:

Виберіть один із варіантів:
1. Уведення чисел із клавіатури
2. Генерація випадкових чисел
3. Вихід із програми
Уведіть номер вибраного пункту:

Розгляньмо використання меню на наступному прикладі.

Приклад А.1#

За трьома сторонами трикутника обчислити його площу.

#include <stdio.h>
#include <stdlib.h>
#include <time.h> 
#include <math.h>

void clrscr(void) 
{
  system("cls||clear");
}

void draw_menu(void)
{
  printf("Виберіть один із варіантів:\n");
  printf("1. Уведення чисел із клавіатури\n");
  printf("2. Генерація випадкових чисел\n");
  printf("3. Вихід із програми\n");
  printf("Уведіть номер вибраного пункту:\n");
}

void get_user_selection(char* ch)
{
  scanf(" %c", ch);
  while(getchar() != '\n'); // очищуємо буфер вводу
}

_Bool is_valid_input(char ch)
{
  return ch == '1' || ch == '2' || ch == '3';
}

int main()
{
  float a, b, c; /*сторони трикутника*/
  float p;       /*напівпериметр трикутника*/
  float s;       /*площа трикутника*/

  clrscr();

  /*нескінченний цикл*/
  while(1) {
    draw_menu();

    char ch; /*обраний пункт меню*/
    get_user_selection(&ch);

    /*якщо увели неправильний параметр – знову меню*/
    if (!is_valid_input(ch)) {
      clrscr();
      printf("Ви увели неправильний номер.\n\n");
      continue;
    }

    switch (ch)
    {
      case '1': /*уведення з клавіатури*/
        printf("Уведіть сторони трикутника:\n");
        printf("a = ");
        scanf("%f", &a);
        printf("b = ");
        scanf("%f", &b);
        printf("c = ");
        scanf("%f", &c);
        break;
      case '2': /*генерація випадкових значень*/
        srand(time(NULL));
        /*для згенерованих чисел виконується умова:
        будь-яка зі сторін менша за суму двох інших*/
        a = 6 + rand() % 5; //a = [6..10]
        b = 6 + rand() % 5; //b = [6..10]
        c = 6 + rand() % 5; //c = [6..10]
        break;
      case '3': /*вихід із програми*/
        exit(0);
        break;
    }

    p = (a + b + c) / 2;
    s = sqrt(p * (p-a) * (p-b) * (p-c));
    printf("Площа трикутника S = %f\n\n", s);
  }

  return 0;
}