понедельник, 30 ноября 2015 г.

Обработка символьных строк



В языках Си/Си++ нет специально определенного строкового типа данных. Символьные строки организуются как массивы символов, последним из которых является символ \0..
Строка описывается как символьный массив:
char STR[20];
char S[10]="cTpoKa"; -инициализация значения
char S[]="cTpoKa";
char S [10] = { 'с' ,'Т',‘р',‘о',‘К','а','\0'} ; 
Отдельные символы строки идентифицируются индексированными именами.
S [ 0 ] = 'С' , S[5]='a'.
Пример 1. Обработка строк обычно связана с перебором всех символов от начала до конца. Однако, ввод-вывод строк удобно делать с помощью функций gets() и  puts() из библиотеки <string.h>
В примере с помощью цикла символы в строке s1 заменяются звёздочкой. Признаком конца  перебора символов является обнаружение нулевого символа в конце строки. То же самое можно сделать с помощью указателя ( в программе - символы в строке s заменяются на ^).
На экран выводится следующее:


Пример 2. Использование библиотеки  <string.h>
Многие нужные функции реализованы в библиотеке <string.h>. При необходимости можно ознакомиться с описанием функций здесь.
В примере ниже  функция strchr(p,c) возвращает указатель на первый символ строки, на которую указывает указатель р, совпадающий со значением переменной с.
В конце программы строка выводится с найденного символа, и выводится на экран его номер.

Пример 3. Обработка строк в функции
Эта программа  делает такую же замену, как в примере 1. Однако, это действие оформлено в виде функции, в которую передаются указатель на строку и символ для замены.



Задачи для самостоятельного решения

1. Написать программу с функцией, которая подсчитывает, сколько раз в данной строке
встречается данная буква. В функцию передается буква и указатель на строку.

2. Написать  программу с функцией поиска первого вхождения шаблона в текст. В качестве
первого параметра функция принимает указатель на строку, в которой нужно искать шаблон. В
качестве второго параметра указатель на строку-шаблон, которую нужно найти. Функция
возвращает позицию первого вхождения строки-шаблона, если он присутствует в строке
(помните, что в C++ принято считать с 0), и -1, если шаблона в тексте нет. В основной
программе инициализировать строку при описании, строку-шаблон вводить с клавиатуры.
Проверить правильность работы написанной функции с помощью функции strstr(s1,s2) из
библиотеки <string.h>
Контрольный пример:
Строка "moja mama varit mamalygu na balkone"
Шаблоны: "mama" ,  "mamalygu"

понедельник, 23 ноября 2015 г.

Массивы и указатели

Указателем называется переменная, содержимым которой является адрес другой переменной определенного типа.
При описании указателя обязательно определяется, на данное какого типа он указывает:
int *p;
double *t;

Для получения адреса переменной используется операция раскрытия указателя & :
int a;
int* p;
p=&a;

 Для получения указателя на массив достаточно приравнять указатель имени массива:
long mas1[10]={0};
long* p=mas1;

Любой указатель ссылается на неограниченную в обе стороны область памяти, заполненную переменными указуемого типа. Поэтому, получив адрес 0-го элемента ( p=mas1), легко получить адрес 5-того: р+5. Значение mas1[5] при этом  можно получить таким образом: *(p+5)

 Пример работы с массивом с помощью указателя и ввода-вывода массива из (в) файла:
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
ifstream input("test.txt");
long mas1[10]={0};
long* p=mas1;
long s=0;
for(int i=0; i<10;i++) input>>mas1[i];   // ввод из файла test.txt
for(int i=0; i<10;i++) cout<<*(p+i)<<"   ";   // вывод массива на экран с помощью указателя
for(int i=0; i<10;i++) s+=*(p+i);                   // работа с массивом
cout<<s<<"  s="<<s<<endl;
ofstream output("prim.txt");
for(int i=0; i<10;i++) output<<mas1[i];     // вывод в файл prim.txt
}



По аналогии решите задачи:

 1. Напишите программу в которой нужно

  •    описать массив целого типа из 50 элементов, равных 0.
  •     заполнить массив числами Фибоначчи: F0=0, F1=1, F(n+1)=F(n)+F(n-1)
  •     вывести массив в файл Fib.txt
  •     с помощью указателей найти номер числа Фибоначчи, равного 4181


2. Напишите программу в которой нужно:

  •     описать массив действительного  типа из 50 элементов, заданный с помощью генератора случайных чисел в диапазоне [-5,5[
  •     найти максимальный элемент массива и его номер
  •     считать из файла Fib.txt пятое число и сравнить его с найденным максимальным элементом

понедельник, 9 ноября 2015 г.

Введение в С/С++

Для закрепления большого объема нового материала (кратко см. на странице Введение в С/С++) решите несколько задачек:

1. Проверьте свои предсказания значений переменных в примере:


Переработайте программу так, чтобы она выдавала таблицу вида (подписи на русском языке!)


2. Напишите следующую программу, которая должна корректно работать с математическими функциями (без предупреждений о несоответствии типов!). В программе опишите переменную х1 целого типа, х2  типа float,  х3  типа double. Организовать корректнос вычисление функции для каждой из переменных, введенных с клавиатуры





3. Напишите еще одну программу, которая заполняет таблицу:


воскресенье, 8 ноября 2015 г.

Приветствую новый поток системных инженеров!

 Начинаем изучение языков программирования С/С++:

1. Для взаимодействия регистрируемся в Google. Инструкцию смотрите здесь.
Можно сразу освоить работу с Google-диском.

2. Устанавливаем компилятор С/С++. Если нет лицензионного, пользуемся свободной кроссплатформеной средой разработки Code::BlocksСкачать ее можно здесь.


3. Установили? Повторите решение задачи, разбиравшейся на занятии:

I. Создайте консольное приложение. 


Запустите проект:
o Запишите файл на диск (нажмите на значок дискеты)
o Откомпилируйте его -меню Построение/Построить решение (F7) Если есть ошибки –исправьте и откомпилируйте снова.
o Произведите компоновку -меню Построение/Построить Имя_проекта
o Запустите на выполнение -меню Отладка/Запуск без отладки


II. Внесите в программу изменения
а) Выведите заголовок таблицы "Tablica umnozenija"
б) Опишите еще одну переменную m. Сделайте ввод переменной m с клавиатуры с подсказкой "n(max)="
в) Сделайте так, чтобы переменная цикла изменялась от 1 до m.
г) Рассмотрите выводимую на экран таблицу при m=15. Убедитесь, что таблица стала неровной. Сделайте ее ровной.
д) Рассчитайте среднее значение произведения в таблице и выведите его под таблицей.



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

Вопросы на засыпку:

1. Кто такие эти весёлые бородатые дядьки?
2. Почему они появились в этом сообщении?
3. Какую награду они получили за свои труды?