Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Функции преобразования строки в число




Используются в качестве операторов для преобразования символьной строки в число соответствующего типа (atoi целого, atol длинного целого, atof вещественного двойной точности). Структура функции:

имя (string);

где имя – обозначение функции (atoi, atol, atof);

string – аргумент (строка, подлежащая преобразованию);

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

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

Все функции располагаются в стандартной библиотеке stdlib.h. Функция atof продублирована в библиотеке math.h.

Внимание!

Использование функций требует предварительного под

ключения конкретной библиотеки (универсально –

stdlib.h):

#include <stdlib.h>

или

#include <math.h>

Аргумент string требует описателя до его использования:

char *string /* размер строки не определен*/

или

char string [10] /* размер зафиксирован

(10 символов)*/

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

Функции обязательны при вводе данных с использованием графического интерфейса.

String – последовательность символов конкретного поля, заменяемых числовым значением определенного типа.

Функция atof предполагает использование строки со структурой стандартной записи числа с фиксированной (плавающей) точкой:

[ПС][знак][мантисса] [e|E [знак] степень]

где ПС – пустая строка (пробелы, знаки табуляции);

знак – обозначение "+" или "–";

мантисса – десятичные цифры с разделителем.

e (E) – обозначение основания системы счисления;

степень – показатель степени (целое число со знаком);

[ ] – признак необязательности содержимого.

5 Функции atoi и atol предполагают в качестве аргумента структуру стандартного целого числа (с учетом начальных пробелов):

[ПС][знак] число

где ПС – пустая строка (пробелы, знаки табуляции);

знак – обозначение "+" или "-";

число – последовательность цифр, образующих целочисленное значение.

Невозможность преобразования аргумента в значение данного типа подтверждается возвращаемым значением 0 (0L для atol).

Использование в качестве аргумента чисел, превышающих диапазон каждого типа, приводит к переполнению. Возвращаемое значение не определено.

Общий вид фрагмента программы ввода трех переменных:

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

float n1; /*описатель переменной n1 */

int n2; /*описатель переменной n2 */

long n3; /*описатель переменной n3 */

char buf[10]; /*описатель создаваемого массива buf */

PoleN1–>GetText(buf, 10); /*перемещение данного в buf*/

n1=atof(buf); /*преобразование в вещественный тип*/

PoleN2–>GetText(buf, 10); /*перемещение данного в buf*/

n2=atoi(buf); /*преобразование в целый тип*/

PoleN3–>GetText(buf, 10); /*перемещение данного в buf*/

n3=atol(buf); /*преобразование в длинный целый тип*/

Описатели типа переменных определяют переменную n1 как вещественную с обычной точностью, n2 – как целую, n3 – длинную целую, а buf как одномерный массив длиной 10 символов.

Восьмая, десятая и двенадцатая строки предписывают последовательное копирование содержимого полей ввода с именами PoleN1, PoleN2, PoleN3 в символьную строку buf, длиной 10 символов. Девятая, одиннадцатая, тринадцатая – последовательное преобразование символьной строки buf в формат вещественного числа n1, целого n2 и длинного целого n3.

Методика ввода переменных в диалоговые поля (при машинной обработке):

установить курсор в поле ввода (клавишей Tab или мышью);

ввести последовательность цифр и знаков числа;

проконтролировать правильность ввода, откорректировав при необходимости;

повторить ввод последующих переменных;

дать команду на выполнение (нажатием кнопки ОК).

Пример 6.6. Организовать ввод вещественных переменных а = 15.8, b = 0.365е-2, целой переменной i = -1.

Фрагмент программы имеет вид:

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

float а,b; /*описатель переменных а и b */

int i; /*описатель переменной i */

char buf[12]; /*описатель массива buf */

PoleA–>GetText(buf, 12);/*перемещение данного а в buf*/

a=atof(buf); /*преобразование в вещественный тип*/

PoleB–>GetText(buf, 12);/*перемещение данного b в buf*/

b=atof(buf); /*преобразование в вещественный тип*/

PoleI–>GetText(buf, 12); /*перемещение данного i в buf*/

i=atoi(buf); /*преобразование в целый тип*/

Размер буфера выбран с учетом возможных изменяемых значений вводимых переменных.

Пример 6.7. Организовать ввод вещественного массива А[4] с данными а1=2.1, а2=5.6, а3=7.5, а4=16.

Фрагмент программы имеет вид:

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

float а [4]; /*описатель переменных массива А */

int i; /* описатель переменной параметра цикла*/

char buf[10]; /*описатель массива buf */

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

{

PoleA–>GetLine(buf, 10, i); /*перемещение а(i) в buf*/

a[i]=atof(buf);/*преобразование в вещественный тип*/

}

Внимание! Использование многострочного активного окна для ввода значений массивов требует предварительной установки его свойств Multiline (многострочное) и Want Return (возвращает значение) на этапе машинной обработки.

Функции преобразования числа в строку

Используются в качестве операторов для преобразования числа соответствующего типа (itoa целого, ltoa длинного целого, gcvt вещественного двойной точности) в символьную строку.

Функция gcvt

Используется в качестве оператора для преобразования вещественного числа двойной точности в символьную строку. Структура оператора:

gcvt(имя, размер, buffer);

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

имя – обозначение преобразуемого (выводимого) данного вещественного типа;

размер – количество выводимых значащих разрядов данного;

buffer – имя формируемой (выводимой) строки;

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

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

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

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

Функция применяется при выводе вещественных данных в поля графического интерфейса.

Имя преобразуемого данного – аналог обозначения выводимой переменной.

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

Переполнение буфера не контролируется.

Возникновение ошибок подтверждается отсутствием возвращаемого значения.

Функции itoa / ltoa

Используются в качестве операторов для преобразования целого /длинного целого числа в символьную строку.

Структура оператора:

ИФ (имя, buffer, ОСЧ);

где ИФ – имя функции (itoa, ltoa);

имя – обозначение преобразуемого (выводимого) данного целого/длинного целого типа;

buffer – имя формируемой (выводимой) строки;

ОСЧ – основание системы счисления выводимого данного;

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

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

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

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

Функции применяются при выводе целочисленных данных в поля графического интерфейса.

Имя преобразуемого данного – аналог обозначения выводимой переменной.

Размер формируемого буфера определяет длину численного значения выводимой переменной с учетом символа окончания строки '\0', добавляемого автоматически.

Диапазон изменения основания системы счисления – целое число (2¸36).

Переполнение буфера не контролируется.

Возникновение ошибок подтверждается отсутствием возвращаемого значения.

Максимальная длина возвращаемой строки определяется используемой функцией (itoa – 17 байт, ltoa – 33 байта).

Общий вид фрагмента программы вывода трех переменных (целых, вещественных):

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

float n1; /*описатель переменной n1 */

int n2; /*описатель переменной n2 */

long n3; /*описатель переменной n3 */

char buf[12]; /*описатель массива buf */

gcvt(n1, 8, buf); /*преобразование числа n1 в строку buf*/

PoleN1–>SetText(buf); /*перемещение данного в PoleN1*/

itoa(n2, buf, 10);/*преобразование числа n2 в строку buf*/

PoleN2–>SetText(buf); /*перемещение данного в PoleN2*/

ltoa (n3, buf, 10);/*преобразование числа n3 в строку buf*/

PoleN3–>SetText(buf); /*перемещение данного в PoleN3*/

Описатели типа переменных определяют переменную n1 как вещественную с обычной точностью, n2 – как целую, n3 – длинную целую, а buf как одномерный массив длиной 12 символов.

Восьмая, десятая, двенадцатая строки предписывают преобразовать вещественную, целую и длинную целую переменные n1, n2, n3 в формат символьной строки buf. Максимальная длина символьной строки – 12 символов. Выводимое вещественное число должно содержать не более 8 значащих символов. Выводимые целые числа относятся к десятичной системе счисления. Девятая, одиннадцатая, тринадцатая – предписание скопировать содержимое символьной строки buf в поля вывода с именами PoleN1, PoleN2, PoleN3.

Функция sprintf

Используется в качестве оператора для форматного преобразования выводимого числа в символьную строку. Формат представления числа задается пользователем.

Структура оператора:

sprintf(buffer, “управляющая строка”, П1 [,П2,...,Пn]);

где sprintf – имя функции (писать в строку);

buffer – имя формируемой (выводимой) строки;

“управляющая строка” – список спецификаторов выводимых переменных, оформленный в виде символьной строки;

П1 … Пn – список идентификаторов выводимых переменных;

,, – разделители идентификаторов (аргументов);

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

[ ] – признак необязательности содержимого;

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

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

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

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

Имя преобразуемого данного – аналог обозначения выводимой переменной.

Структура каждой переменной определяется соответствующим спецификатором в управляющей строке.

Последовательность спецификаторов управляющей строки определяется перечислением переменных в списке.

Вывод (указание в списке) нескольких переменных допускается, но не рекомендуется (нарушается принцип одно поле – одна переменная).

Результат действия функции – подготовка содержимого буфера (buffer) к копированию в поле вывода.

Общий вид фрагмента программы вывода двух переменных (целой и вещественной):

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

float n1; /*описатель переменной n1 */

int n2; /*описатель переменной n2 */

char buf[12]; /*описатель массива buf */

sprintf(buf,”%5.3f”, n1);/*преобразование числа n1 в buf*/

PoleN1–>SetText(buf);/*перемещение данного в PoleN1*/

sprintf(buf,”%10d”, n2);/*преобразование числа n1 в buf*/

PoleN2–>SetText(buf);/*перемещение данного в PoleN1*/

Седьмая и девятая строки предписывают преобразовать вещественную и целую переменные n1, n2 в символьную строку buf по форматам, указанным в управляющей строке. Восьмая и десятая – скопировать содержимое символьной строки buf в поля вывода с именами PoleN1, PoleN2.

Пример 6.8. Организовать вывод вещественных переменных а = 15.8, b = 0.365е-2, целой переменной i = -1.

Фрагмент программы имеет вид:

#include <stdlib.h> /* директивы*/

#include <stdio.h> /* препроцессора*/

float а,b; /*описатель переменных а и b */

int i; /*описатель переменной i */

char buf[12]; /*описатель массива buf */

sprintf(buf,”%5.3f”, а); /* преобразование числа в buf*/

PoleA–>SetText(buf); /*перемещение данного в PoleА*/

gcvt(b, 8, buf); /* преобразование числа в buf*/

PoleB–>SetText(buf); /*перемещение данного в PoleB*/

itoa(i, buf, 10); /* преобразование числа в buf*/

PoleI–>SetText(buf); /*перемещение данного в PoleI*/

Фрагмент реализует преобразование выводимых переменных в символьные строки разными способами (функции sprintf, gcvt, itoa), позволяя определить достоинства и недостатки каждого. Пользователь выбирает любой из предложенных способов в соответствии с целью задачи.

Результаты вывода вещественных переменных а = 15.8, b = 0.365е-2, целой переменной i = -1 в активные поля имеют вид:

Количество разрядов в дробной части переменной «а» обусловлено заданным спецификатором (три знака после разделителя), в переменной «b» увеличено на 2 разряда (нулевых) в соответствии с правилом 3 использования функции gcvt.

Анализ переменной «b» определяет низкую эффективность ее представления (бесформатный вывод), подтверждая целесообразность форматного вывода вещественных переменных.

Исходя из изложенного, варианты программной реализации задачи о вычислении площади прямоугольника имеют вид:

а) программа с классическим вводом/выводом:

# include <iostream.h>

#include <conio.h>

main()

{

float a,b,s;

cin >>a>>b;

s = a*b;

cout <<" a= "<<a<<" b= "<<b<<" s= "<<s;

getch();

}

б) фрагмент программы с использованием созданного ранее шаблона графического интерфейса (см. начало разд. 6.3) имеет вид:

#include<stdlib.h>

{

float a,b,s;

char buf[12];

PoleA–>GetText(buf,12); /* Скопировать содержимое окна ввода с именем PoleA в символьную строку buf */

a=atof(buf); /* Преобразовать символьную строку в вещественное число «а»*/

PoleB->GetText(buf,12); /* Скопировать содержимое окна ввода с именем PoleB в символьную строку «buf» */

b=atof(buf); /* Преобразовать символьную строку в вещественное число «b» */

s=a*b;

gcvt(s, 12, buf); /* Преобразовать число «s» в формат символьной строки*/

PoleS->SetText(buf); /*Отобразить результат в поле с именем PoleS*/

}





Поделиться с друзьями:


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 1308 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Два самых важных дня в твоей жизни: день, когда ты появился на свет, и день, когда понял, зачем. © Марк Твен
==> читать все изречения...

2283 - | 2108 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.