- •Институт математики, экономики и механики кафедра математического обеспечения компьютерных систем в. С. Макогон, и. Н. Лисицына
- •Оглавление
- •Введение
- •Основныетипы данных, операции и выражения
- •Описание переменных.
- •Операции , выражения и операторы.
- •3. Операторы управления программой. Базовые управляющие структуры.
- •Операторы ветвления Условный оператор if
- •Оператор - переключатель
- •Операторы повторения (цикла).
- •4. Программирование алгоритмов линейной структуры.
- •5. Программирование разветвляющихся алгоритмов (оператор if).
- •6. Программирование разветвляющихся алгоритмов (оператор switch)
- •Оператор for
- •Цикл с постусловием do -while
- •8. Итерационные циклы
- •Задачи для самостоятельного решения
- •9. Программирование алгоритмов с использованием функций
- •Основные понятия численного решения уравнений
- •10. Программирование алгоритмов с использованием массивов
- •11. Символьные переменные и строки. Обработка строк.
- •Другие средства ввода-вывода символов и строк
- •Массивы строк
- •12. Указатели
- •Массивы указателей
- •2. Описание метода трапеций
- •3. Программный комплекс
- •13. Структуры
- •Указатели на структуры
- •14. Файлы. Потоковый ввод-вывод
- •Функции для работы с файлами
- •Открытие файловых потоков
- •Закрытие файловых потоков
- •Удаление файлов
- •Переименование файлов
- •Реинициализация
- •Функции для ввода-вывода по символам
- •1 Вариант) содержит только буквы исходной строки
- •2 Вариант) перевернута по отношению к исходной
- •Двоичные (бинарные) файлы. Блочно-ориентированный ввод-вывод.
Массивы строк
Для создания массива строк используется двумерный символьный массив, в котором размер левого индекса определяет количество строк, а размер правого - максимальную длину каждой строки. Например, при выполнении следующей инструкции объявляется массив, предназначенный для хранения 10 строк длиной 80 символов.
char str_mas[10][80];
Для доступа к отдельной строке достаточно указать только левый индекс. Например, следующая инструкция вызывает функцию gets() для записи третьей строки массива str_mas.
gets(str_mas[2]);
Для получения доступа к четвертому символу третьей строки достаточно написать
cout<<str_mas[2][5];
Задача 146.В следующей программе демонстрируется использование массива строк при реализации расчета зарплаты служащих с повременной оплатой и вывода ведомости на получение зарплаты с сортировкой их фамилий по алфавиту.
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <dos.h>
#include <string.h>
const int m=5, int L=40;
void main()
{
clrscr();
int k, i, j;
char rab[L];
char fio[m][L]={"Иванов", "Андреев", "МакДональд", "Петров", "Ващенко"};
float tarif[m], salary[m];
int work[m];
// Сортировка списка фамилий по алфавиту.
for(i=0; i<m-1; i++)
for(j=i+1; j<m; j++)
if(strcmp(fio[i], fio[j])>0)
{
strcpy(rab, fio[i]);
strcpy(fio[i], fio[j]);
strcpy(fio[j], rab);
}
for(k=0; k<m; k++)
cout<<fio[k]<<"\n";
// Расчет зарплаты по тарифу и отработанным часам.
k=0;
puts(" Введи тариф и количество отработанных часов ");
while(k<m)
{
puts(fio[k]);
cout<<" Тариф: ";
cin>>tarif[k];
cout<<" Отработанно часов: ";
cin>>work[k];
salary[k]=tarif[k]*work[k];
k++;
}
puts("");
puts(" Ведомость на выдачу зарплаты ");
puts("");
for(k=0; k<m; k++)
printf(" %-25s %12.2f\n", fio[k], salary[k]);
getch();
}
Задача 147.Программа осуществляет статистическую обработку сведений о сдаче сессии студентами группы. Фамилии студентов хранятся в массиве строк fio[M][Lstr], а оценки каждого по N (N=4) предметам — в двумерном массиве session [M][N]. Программа, в частности, печатает фамилии тех, у кого есть двойки и их количество, а также предмет, по которому студенты имеют наибольшее количество двоек.
// Программа отлажена вVisual Studio 2008
#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include <iostream>
#include<string.h>
using namespace std;
const int M=5, N=4, LStr=20;
// сортировка строк использование strcpy(),strcmp()
void sor( char fio[][LStr] , int count)
{ char rab[LStr]; int i,k;
for (i=0; i<count-1; i++)
for (k=i+1; k<count; k++)
if (strcmp(fio[i],fio[k])>0)
{
strcpy(rab, fio[i]);
strcpy(fio[i], fio[k]);
strcpy(fio[k], rab) ;
}
}
int main()
{
// Устанавливаем локализацию для выходного потока
wcout.imbue( locale( "rus_rus.866" ) );
char fio[M][LStr]={"IVANOV","PETROV","WASECHKIN","SIDOROV","AKSAKOV"};
float mark[M][N]; int i,k,test, max, p[N-1], predmet;
//********************
sor(fio,M);
//********************
for (i=0; i<M; i++)
{
wcout<<L"Введи оценки студента по фамилии "<<fio[i]<<"\n";
wcout<<L"математика: "; cin>>mark[i][0];
wcout<<L"информатика: "; cin>>mark[i][1];
wcout<<L"экономика: "; cin>>mark[i][2];
}
for (i=0; i<M; i++)
mark[i][N-1]=(mark[i][0]+mark[i][1]+mark[i][2])/(N-1);
wcout<<L"\n\n Результаты сдачи экзаменов" ;
wcout<<L"\n\nФамилия Матем Информ Эконом Ср.балл \n";
for (i=0; i<M; i++)
printf ("\n%-15s %-10.0f %-10.0f %-10.0f %-10.2f",fio[i],
mark[i][0],mark[i][1],mark[i][2],mark[i][3]);
wcout<<L"\n\nЭти cтуденты позорят наш ВУЗ:";
for (i=0; i<M; i++)
{
test=0;
for (k=0;k<N-1;k++)
if (mark[i][k]==2)
test++;
if (test!=0) wcout<<"\n\t"<<L"У "<<fio[i]<<L"а двоек - "<<test;
}
for (k=0; k<N-1; k++)
{
p[k]= 0; max = 0;
for (i=0;i<M;i++)
if (mark[i][k]==2) p[k]=p[k]+1;
if (p[k]>max)
{ max=p[k];
predmet=k;
}
}
wcout<<L"\n\nБольше всего двоек ";
switch (predmet)
{
case 0 :wcout<<L" по математике";
break;
case 1 :wcout<<L" по информатике";
break;
case 2: wcout<<L" по экономике" ;
break;
}
wcout<<L", а именно "<<max<<L" шт.\n";
getch();return 0;
}
Задачи для самостоятельного решения
Ввести два слова. Напечатать их в алфавитном порядке.
В заданной строке символов удалить разделители: пробелы, запятые, тире.
Дан текст, содержащий не более 120 символов. Напечатать сначала все цифры, входящие в него, затем прописные латинские и русские буквы, а потом все остальные символы.
Составить программу, которая в заданной строке символов подсчитывает количество вхождений:
а) каждой из букв латинского (русского) алфавита;
б) каждой из цифр.
5. Определить, сколько раз в заданном тексте встречается каждая из его литер.
Удалить из заданного текста «лишние» пробелы, оставив между словами по одному пробелу.
Удалить из заданной фразы текст, заключённый в круглые скобки (вместе со скобками). Результат выдать на экран.
Ввести текст, в котором слова отделяются друг от друга пробелами. Вывести на экран последнее слово наоборот.
Дан текст, содержащий только буквы. Определить, симметричен ли он, т.е. читается ли он одинаково слева направо и справа налево (например, текст «пилвино онивлип» симметричен).
Составить программу, которая в заданной строке удваивает каждую его букву (например, из слова ‘база’ должно получиться ‘ббааззаа’).
Ввести строку символов S1. Построить новую строку S2, полученную из S1 добавлением после каждого символа ‘*’ цепочки символов из k пробелов. Считается, что натуральное число k > 0 задано.
Составить программу для игры в ‘поле чудес’ (угадывание слова путём постепенного добавления по одной букве).
Строки как параметры функций
Составить функцию, которая позволяет в заданной строке S1 найти текст, заключенный в круглые скобки и выдать этот текст на экран. Подсчитать количество символов в скобках.
Составить функцию, которая по заданной строке S1 строит новую строку S2, полученную удвоением каждой буквы исходной строки.
Составить функцию, которая позволяет из заданной строки S1 переслать в другую строку S2 символы введённой строки, кроме букв “а” и “A”. Строку S2 напечатать.
Составить функцию, которая каждую встреченную в заданной строке символов букву “а” заменяет сочетанием букв “ку” ( так, например, из слова “абракадабра” должно получиться слово “кубркуккудкубрку”).
Составить функцию, которая по заданной строке S1 строит новую строку S2 удалением из S1 символов: цифр, пробелов и запятых.
Составить функцию, которая для заданной строки S1 печатает те её символы, которые входят в неё только один раз.
Составить функцию, которая позволяет для заданной строки подсчитать и выдать на экран количество букв в первом слове (слова в строке отделяются пробелами).
Составить функцию, которая позволяет для заданной строки подсчитать и выдать на экран количество букв в последнем слове (слова в строке отделяются пробелами).
Составить функцию, которая позволяет из заданной строки S1 переслать в другую строку S2 символы введённой строки, исключив цифры. Результат выдать на экран.
Составить функцию, которая определяет, какая из букв в заданном тексте втречается более двух раз.
Составить функцию для решения следующей задачи. Считая, что слова в тексте отделяются несколькими пробелами, найти и напечатать слово, которое начинается и заканчивается одинаковой буквой.
Составить функцию, которая позволяет определить, какая из букв в заданном тексте встречается наиболее часто ( например, в слове «абракадабра» это буква «а»).
Составить функцию для решения следующей задачи. Считая, что слова в тексте отделяются несколькими пробелами, найти и напечатать все слова, которые заканчиваются заданной буквой.
Составить функцию, которая позволяет на основе заданной строки S1, содержащей буквы и цифры, построить две новые строки: S2, содержащую все буквы и S2 – все цифры исходной строки.
Составить функцию, которая преобразует заданный текст (шифрует), заменяя всякую букву латинского алфавита на симметричную ей относительно середины алфавита. (Латинский алфавит: ABCDEFGHIJKLMNOPQRSTUVWXYZ).