Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Интегрирование Глава 9.doc
Скачиваний:
2
Добавлен:
12.11.2018
Размер:
1.49 Mб
Скачать
            1. Программирование задачи

Дополнительное условие (прекращение ввода исходных данных по желанию пользователя) определяет организацию ввода текущего значения элемента массива как символьной строки.

Ввод исходных данных ранее в классическом программировании осуществлялся функцией scanf(). Она позволяла вводить как числовые, так и символьные данные, но не могла распознавать завершающий неотображаемый символ ввода строки («\0»).

Планируемое алгоритмом задачи условие окончание ввода исходных данных (символ «\0») программно реализуется функцией gets( ).

Функция ввода символьной строки gets( )

Функция предназначена для ввода символьной строки с клавиатуры в буфер с указанным именем (резервируется в описателе). Функция, как правило, используется в форме оператора. Структура оператора:

gets( buf );

где gets – обозначение функции;

buf – имя формируемой (вводимой) символьной строки;

( ) – ограничители аргумента;

; – символ оператора.

Функция располагается в библиотеке stdio.h.

Правила записи и использования

  1. Функция применяется для ввода символьных строк.

  2. Имя буфера – аналог обозначения вводимой строки.

  3. Размер буфера – целое число, задается в описателе строки и определяет максимальную длину вводимой строки.

  4. Содержимое буфера NULL свидетельствует об ошибке.

  5. Функция завершает ввод строки при нажатии клавиши «Enter».

  6. Функция не включает код клавиши «Enter» в состав символьной строки, добавляя вместо него символ окончания «\0».

Общий вид фрагмента программы ввода символьной строки str:

#include <stdio.h> /* директива препроцессора*/

char str[10]; /*описатель символьного массива (строки) str */

gets(str); /*ввод символов с клавиатуры в массив str*/

Описатель типа определяет массив str, как символьный, длиной 10 символов. Оператор gets(str); предписывает ввод символов строки str (включая пробелы) с клавиатуры до нажатия клавиши «Enter».

  • Внимание! Программирование задачи с использованием графического интерфейса функции gets() не требует.

Таблица идентификации переменных алгоритма и создаваемой программы представлена в табл. 9.5.

Таблица 9.5

Обозначение в алгоритме

aпр

n

i

j

ai

aj

Обозначение в программе

аpr

n

i

j

a[i]

a[j]

Классический вариант программирования задачи

#include<stdio.h>

#include<stdlib.h>

#include<windows.h>

#include<conio.h>

#define N 20

main()

{

float a[20], apr; /* описание */

int i, j, n; /* локальных переменных */

char buf[50]; /*описание символьного массива*/

clrscr();

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

{

CharToOem(" Введите элемент а ",buf);

printf("\n %s[%d] \n",buf,i+1); /* ввод*/

gets(buf);

if(buf[0] == '\0')

break;

else

{

a[i]=atof(buf);/* текущего элемента массива*/

n = i+1;

}

}

CharToOem(" \n\n Исходный массив А \n\n",buf);

printf("%s",buf);

for(i=0;i<n;i++) /*заголовок цикла вывода исходного массива*/

printf(" %5.2f ",a[i]);

for (i = 0; i < n ; i++) /* заголовок внешн. цикла сортировки */

{

for(j = n-1 ; j > i ; j--) /*заголовок внутр. цикла сортировки */

{

if(a[j-1] > a[j])

{

apr = a[j-1];

a[j-1] = a[j];

a[j] = apr;

}

}

}

CharToOem(" \n Отсортированный массив А \n",buf);

printf("%s",buf);

for(i=0;i<n;i++) /*заголовок цикла вывода результатов */

printf(" %5.2f ",a[i]);

getch();

}

1.2 -6. 4.8 8.5 25. 11. 14. -2 – элементы массива.

Под закрывающей скобкой приведены исходные данные для решения задачи.

Результаты решения представлены в приложении 9.9.

Программирование задачи с графическим интерфейсом

Программирование задачи при использовании графического интерфейса предварим его разработкой.

ListBoxSortA

Для ввода элементов массива А планируем многострочное поле редактирования (EditА). Для вывода элементов отсортированного массива А – поле-список (ListBoxSortA).

Управление процессом решения реализуем двумя командными кнопками, расположенными в нижней части окна. Назначение каждой определяется ее названием.

С учетом планируемого интерфейса выполним программирование задачи.

#include<stdio.h>

#include<stdlib.h>

#define N 20…

void TVrDlgClient::BNClickedOk()

{

// INSERT>> Your code here.

float a[20], apr; /* описание */

int i, j, n; /* локальных переменных */

char buf[50]; /*описание символьного массива*/

ListBoxSortA->ClearList();

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

{

EditA->GetLine(buf,10,i); /* ввод*/

if(buf[0] == '\0')

break;

else

{

a[i]=atof(buf);/* текущего элемента массива*/

n= i+1;

}

}

for (i = 0; i < n ; i++)/* заголовок внешн. цикла сортировки */

{

for(j = n-1 ; j > i ; j--) /*заголовок внутр. цикла сортировки */

{

if(a[j-1] > a[j])

{

apr = a[j-1];

a[j-1] = a[j];

a[j] = apr;

}

}

}

for (i=0; i< n; i++)/* заголовок цикла вывода результата */

{

sprintf(buf," %5.2f",a[i]);

ListBoxSortA->AddString(buf); /* вывод элемента массива*/

}

}

1.2 -6. 4.8 8.5 25. 11. 14. -2 – элементы массива;

Под закрывающей скобкой приведены исходные данные для решения задачи.

Результаты решения представлены в приложении 9.10.