Программирование на языке Си/§8

Для представления текстовой информации в языке Си используются константы, символьные переменные и строковые константы (строки). в Си строка - это массив символов. Мы уже имели дело с символьными константами и с типом данных char. Также вспомним специальные функции обмена: getchar() - позволяет читать из входного потока по одному символу за обращение. Чтение данных также начинается с нажатием "Enter". putcar (X) - выводит символьное значение X в стандартный выходной поток.

## Программа 8.1

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

```
#include <stdio.h>
#include <stdlib.h>
void main()
{
char z,s;
puts("Наберите предложение\n");
for (z=s=' ';z!='.';s=z)
{
scanf("%c",&z); // напомню что спецификатор c обеспечивает по символьный ввод, а s ввод строки.
if(z==' ' && s==' ') continue; // проверяем на условие повторяющихся пробелов.
printf ("%c",z); // посимвольная печать
}
}
```

В этой программе мы производим посимвольную обработку введённого нами текста. Признаком окончания обработки является символ точки.

Усовершенствуем программу так, чтобы она удаляла все следующие друг за другом повторяющиеся символы

```
#include <stdio.h>
#include <stdlib.h>
void main()
{
char z,s, m[10],i;
puts("nap predloj\n");
for (i=0;z!='.';i++)
{
scanf("%c",&z); // вводим текст по символам
m[i]=z; // загоняем каждый символ в массив
if(m[i]==m[i-1]) continue; // проверяем на повторы
printf ("%c",z); // печатаем результат
}
}
```

## Программа 8.2

Напишем программу выдающую нам латинский алфавит и восьмеричный, десятичный код символа

```
#include <stdio.h>
#include <stdlib.h>
void main()
{
char z;
for(z='A';z<='Z';z++)
printf ("%c - %x - %o\n",z,z,z); // напомню, что спецификаторы: x - шестнадцатеричный, o - восьмеричный.
getch ();
}
```

Переделайте программу так, чтобы она выдавала код символа введённого с клавиатуры. Усовершенствуйте получившуюся программу так, чтобы она выдавала коды символов из последовательности в юникоде, где начало и конец последовательности задаёт пользователь. Переделайте программу введением массивов таким образом, чтобы она поваляла ввести последовательность символов оканчивающихся точкой, и выдавала коды символов всей введённой последовательности через.

## Программа 8.3

Напишем программу преобразования прописных букв в строчные.

```
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
unsigned char mas[20]; //объявляем массив символов
int i;
puts("Введите символы");
gets(mas); // вводим строку символов
for(i=0;mas[i];i++)
{
if (((mas[i]>='a') && (mas[i]<='z')) || ((mas[i]>='а') && (mas[i]<='п'))) //проверяем введённые символы на буквы
{
mas[i]-=32; // преобразуем в строчные
}
else
if(mas[i]>='р' && mas[i]<='я')
{
mas[i]-=80;
}
}
printf("\n%s\n",mas);
getch ();
}
```

При вводе русских букв в программе могут возникнуть ошибки, так как не все компиляторы языка Си дружат с русским языком.

## Программа 8.4

## Домашнее задание

- Напишите программу подсчёта количества пробелов в предложении. Переделайте её так, чтобы она могла подсчитывать количество символов отличных от нуля.
- Напишите программу, которая просит пользователя ввести его имя и отчество, признаком окончания ввода клавиша "Enter".
- Напишите программу подсчёта длины введённой пользователем последовательности символов, признаком окончания ввода считать точку.
- Напишите программу преобразования двоичного, восьмеричного и шестнадцатеричного числа в десятичное. Организуйте ввод посредством меню, где пользователь выбирает из какой системы счисления преобразовать число в десятичную систему счисления.