Специальные функции вывода текстовой информации — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Специальные функции вывода текстовой информации

2017-11-18 305
Специальные функции вывода текстовой информации 0.00 из 5.00 0 оценок
Заказать работу

К дополнительным средствам вывода следует отнести функцию puts(str), передающую строку str на стандартное устройство stdout, и вывод на дисплей с помощью функции cprintf. Обращение к последней не отличается от обращения к функции printf, но дисплей не допускает переназначения потока вывода. Кроме того, при выводе на дисплей имеется возможность окрасить текст в тот или иной цвет.

 

Билет 12

Аналог типизированных (записеориентированных) файлов в языке Си.

Типизированные файлы в Паскаль.

Типизированный файл – это файл, в котором содержатся однотипные данные. Типизированный файл задается с помощью 2-х ключевых слов «file of». После слова «of» указывается тип файла, например integer, real, char, string и т.д. Тип файла может быть любым за исключением файлового типа (не может быть файла файлов) и комбинированного типа, один из компонентов которого имеет файловый тип.

В отличие от текстовых файлов, в типизированном файле информация хранится в двоичном представлении (в текстовом файле информация хранится в виде цепочки символов). Данный факт позволяет производить чтение и запись в файл более быстрым способом, т.к. отсутствует необходимость в преобразовании данных. Кроме того, в типизированном файле возможен прямой доступ к записям файла (в текстовом файле возможен только последовательный доступ).

Program file11;

uses crt;

Type Student = record

fio: string [20];

kurs, group: integer;

end;

var zap: student;

f: file of student;

name: string;

 

Cтруктуры в си

Структуры в си (c) - это объединенные данные, у которых есть некоторая логическая взаимосвязь. В отличие от массивов, структуры могут содержать данные разных типов. Вот пару примеров структур в си (c): структура класс (имя учащегося, буква класса, средний балл); структура футбольная команда (тренер, название команды, место в турнирной таблице). Т.е. структуру вы будете использовать довольно часто. Теперь давайте рассмотрим, как описываются структуры в си:

struct klass {

char name[20];

char klass_name;

float bal; };

struct

Любая структура в языке си (c) должна начинаться с ключевого слова - struct, которое сообщает компилятору, что тут у нас будет структура. Все данные в структуре (struct) пишутся в фигурных скобках, и в конце ставится запятая с точкой (;). Советую сразу ставить запятую с точкой, что бы не было ошибок.

Как вы видите, в структуре (struct) у нас находятся данные различных типов, но они объединены в логическую связь, так как в моем примере они являются определенным школьным классом. Данные в структуре должны иметь уникальные имена, но в различных структурах можно использовать одинаковые названия.

Структура, которая создана выше не занимает в памяти компьютера места, так как мы, на самом деле, просто создали свой тип данных. Объявление структуры ни чем не отличается от объявления любого типа данных в языке си (c). Вот пример:

struct klass a, b[5], *c;

Мы объявили переменную а типа struct klass, массив b, состоящий из 5 элементов типа struct klass и указатель на переменную struct klass.

Так же можно объявлять переменные сразу после объявления структуры:

struct klass {

char name[20];

char klass_name;

float bal;

} a, b[5], *c;

А какие же операции можно проделывать со структурами? Ответ на этот вопрос лучше перечислить по пунктам:

Присваивание полю структуры значение того же типа

можно получить адрес структуры. Не забываем операцию взятия адреса (&)

Можно обращаться к любому полю структуры

Для того, что бы определить размер структуры можно использовать операцию sizeof()

Инициализация структуры

Инициализация структуры в языке си (c) происходит так же, как и при инициализации массива. Вот пример инициализации структуры:

struct klass a = {"Sergey", 'B', 4.5 };

Т.е. мы создаем переменную типа struct klass и присваиваем всем трем полям, которые у нас определенны в структуре, значения. Порядок очень важен при инициализации структуры, так как компьютер сам не может отсортировывать данные. Если какое-либо поле у вас будет не заполненным, то оно автоматом заполнится 0 - для целочисленных типов; NULL - для указателей; \0 (ноль-терминатор) - для строковых типов.

Структурированные файлы

Структурированный файл является частным случаем двоичного файла, в котором в качестве порции обмена выступает структура языка C, являющаяся точным аналогом записи в Паскале. По сравнению с предыдущим примером использование записей позволяет сократить количество обращений к функциям fread/fwrite, т.к. в одном обращении участвуют все поля записи.

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

Пример 3. Приведенная ниже программа является модификацией предыдущего примера. Единственное ее отличие состоит в использовании структуры (записи) b, состоящей из символьного (b.s, 5 байт, включая нулевой байт – признак конца строки), целочисленного (b.n, 2 байта в BC и 4 байта в BCB) и вещественного (b.r, 4 байта) полей.

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <string.h>

#include <conio.h>

main()

{ FILE *f1;

int j,k;

struct {

char s[5];

int n;

float r;

} b;

strcpy(b.s,"Line");

f1=fopen("c_rec","wb");

for(j=1;j<11;j++)

{ b.n=j; b.r=sqrt(j);

fwrite(&b,sizeof(b),1,f1);

printf("\n%s %d %f",b.s,b.n,b.r);

}

fclose(f1);

printf("\n");

f1=fopen("c_rec","rb");

for(j=10; j>0; j--)

{ fseek(f1,(j-1)*sizeof(b),SEEK_SET);

fread(&b,sizeof(b),1,f1);

printf("\n%s %d %f",b.s,b.n,b.r);

}

getch();

}

Результат работы этой программы ничем не отличается от предыдущего примера.

Следующий пример взят из области описания структур данных – это описание типа “запись” (структура в Си и Яве). Структура ВСЕГДА содержит следующие компоненты:

список полей с указанием имени поля и его типа

список вариантных частей (union в Си)

Пример записи из языка Паскаль:

record

field1:integer;

field2:array[0..30]of char;

case byte of

1:(b0,b1:byte);

2:(i0:integer);

end

Пример записи из языка Си:

struct {

int field1;

char field2[31];

union {

byte b0b1[2];

int i0;

} u;

}

В Си требуется для каждой вариантной части придумывать собственное имя и тип. В то же время в Паскале требуется обязательно указать поле - переключатель или хотя - бы тип этого поля (как в вышеприведенном примере). Все варианты не представляются идеальными, однако наиболее универсальным можно считать вариант языка Паскаль.

 

2. Оператор присваивания. Преобразования типов данных в языке Си.

Оператор присваивания

Оператор присваивания является наиболее распространенным средством, позволяющим изменить значение переменной во время работы программы.

В простейшем случае он имеет следующий формат:

namev = expression;

Здесь namev – имя переменной:

expression – выражение, значение которого будет присвоено переменной namev.

Если переменная namev относится к категории числовых данных, то результат вычисления выражения тоже должен быть числовым. Типы переменной namev и значения выражения expression при этом могут не совпадать. О соответствующем преобразовании машинных форматов система позаботится сама. Но не забывайте, что при преобразовании вещественного значения в целочисленное дробная часть выражения (какой бы она ни была) будет отброшена. Таким образом, об округлении вы должны позаботиться сами. В тех случаях, когда тип выражения допускает более широкий диапазон представления данных, возможна потеря точности или переполнение диапазона, предусмотренного для переменной namev. В таких случаях компилятор выдает сообщение о возможных последствиях, и на такие сообщения программист обязан обратить внимание.

Если нескольким переменным необходимо присвоить значение одного и того же выражения, то оператор присваивания допускает расширенный формат:

v1=v2=v3=exp;

Используя такую форму множественного присвоения, не пытайтесь писать операторы, результат выполнения которых может по разному толковаться разными пользователями. Например:

i=5;

i=a[i]=4;

j=6;

a[j]=j=2;

Результат таких действий зависит от алгоритма просмотра строки программы и последовательности выполнения присваиваний – слева направо или справа налево. Старайтесь избегать подобных ситуаций, т.к. в случае переноса программы в другую систему программирования можно получить неожиданный результат.

В программах на C, C++ очень часто встречаются специфические форматы записи операторов присваивания. В тех случаях, когда значение переменной должно быть увеличено или уменьшено на 1, используются следующие синтаксические конструкции:

x++; //вместо x=x+1;

++x; // вместо x=x+1;

x--; // вместо x=x-1;

--x; // вместо x=x-1;

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

y=a[i++];

z=b[++j];

В первом случае переменной y будет присвоено значение a[i] со старым индексом, после чего индекс i будет увеличен на 1. Во втором случае сначала индекс j будет увеличен на 1, а потом значение b[j] с новым индексом будет участвовать в операции присвоения.

Еще одна форма оператора присваивания ведет свое происхождение от условного арифметического выражения, впервые появившегося в языке АЛГОЛ-60:

v = (a > b)? e1: e2;

Выполняется такой оператор следующим образом. Проверяется условие, записанное в круглых скобках и, если оно удовлетворяется, то переменной v присваивается значение выражения e1. В противном случае в переменную v засылается значение выражения e2.


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

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.038 с.