Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЛаб(Часть_1_Книги).doc
Скачиваний:
7
Добавлен:
03.05.2019
Размер:
1.04 Mб
Скачать

Упражнения, тесты.

1. Пусть const n=10; int a[n]={-1, -2, 33, 44, -5, -6, 77, 8}; int *q;

Какие из следующих присваиваний допустимы и что они означают:

1) q=a; 2) q=*a[0]; 3) q=n; 4) q=&a[0]; 5) int i=2; q=&a[i];

6) int i=2; q=a[i]; 7) q=a[0]; 8) q=&a[n]; ?

  1. Дано описание функции:

void Fun (int *x, int N, int &S)

{ S=0; for (int i=0; ; )

{ S+=x[i++];

if (x[i]==0 || i ==N ) return; }

}

/* или

void Fun (int *x, int N, int &S)

{ S=0; for (int i=0; i<N-1; ) if (x[++i]>0) S+=x[i]; } */

В каких строках правильно вызвана функция? Что будет выведено для правильных вариантов?

int main( ) { const n=10; int a[n]= {11, -2, 30, 44, -5, 66, 0, 8, 99}; int &Sum1; Fun (a,n,Sum1); cout<<endl<<Sum1; //1

int Sum2; Fun (&a[0],n/2,Sum2); cout<<endl<<Sum2; //2

int Sum3; Fun (a,n,Sum3); cout<<endl<<Sum3; //3

int Sum4; Fun (&a[5], 5, Sum4); cout<<endl<<Sum4; //4

int *Sum5; Fun (a,n,Sum5);cout<<endl<<Sum5; //5

int *q=a[5], Sum6=0; Fun(q, n/2, Sum6); cout<<endl<<Sum6; //6

int *q=a[n/2], Sum7=0; Fun(q, 5, Sum7);cout<<endl<<Sum7; //7

int *q=&a[n/2], Sum8=0; Fun(q, 5, Sum8); cout<<endl<<Sum8; //8

int *q=*a[n/2], Sum9=0; Fun(q, 5, Sum9); cout<<endl<<Sum9; //9

getch(); return 0; }

3. Описана функция:

void OutChar (int *a, int N, int k)

{ cout<< endl;

for (int i=0; i<N; i++) printf("%d %c %c", a[i], a[i], ( i+1)%k ? '\n': ' ' ); }

Какие из следующих вызовов правильные? Что будет выведено для правильных вариантов?

main(){ const n=10; int k=5; int a[n]= {48, 49,50,51, 52, 53, 54, 55, 56, 57};

OutChar (a,n,k); /* 1 */ OutChar(a, k, n); /* 5 */

OutChar(&a[0], k,k/2); /* 2 */ OutChar(&a[k], k,k/2); /* 6 */

OutChar( a[0], k, n); /* 3 */ OutChar (a,2*k,k); /* 7 */

OutChar(a[0], n, k); /* 4 */ OutChar(*a[0], n, k); /* 8 */

getch(); }

4. Описана функция:

int MyFun (int *x, int n)

{ по некоторому алгоритму для одномерного массива x размерности n получаем и возвращаем одно целое число

}

Как эту функцию без изменений использовать для получения и (или) вывода этого же параметра в каждой строке статической матрицы, объявленной так:

const n=4,m=6; int A[n][m];?

т.е для получения и (или) вывода n чисел, по одному для каждой строки? Выбери правильные варианты ответов:

1) for(int i=0;i<n;i++) MyFun( M[i] ,m);

2) for(int i=0;i<n;i++) cout<<MyFun( M[i] ,m)<<” “;

3) for(int i=0;i<m;i++) cout<<MyFun( M[i] , n)<<” “;

4) for(int i=0;i<n;i++) { r=MyFun(&M[i][0], m); cout<<r<<” “;}

5) for(int i=0;i<m;i++) { r=MyFun(&M[i][0], n); cout<<r<<” “;}

6) for(int i=0;i<n;i++) cout<<MyFun( M[i][0] ,m)<<” “;

7) for(int i=0;i<n;i++) { r=MyFun(M[i][0], m); cout<<r<<” “;}

5. Дан код:

const size2=6;

void Sort1(int X[],int n);

void MyOut(int M[][size2],int n,int m)

{ cout<<endl; for(int i=0;i<n;i++){cout<<endl;

for(int j=0;j<m;j++) printf("%4d ",M[i][j]);

} cout<<endl;

}

void Sortmatr1(int M[][size2],int n,int m);

int main() {const n=3,m=6; int A[n][size2]={ …

} ;

Sortmatr1(A, n, m); cout<<endl; MyOut (A, n, m);

getch(); return 0;

}

void Sort1(int X[], int m)

{ int min, Nmin; for(int k=0;k<m-1;k++)

{ min=X[k]; Nmin=k;

for (int j=k;j<m;j++)

if(X[j]<min) { min=X[j]; Nmin=j; }

X[Nmin]=X[k]; X[k]=min;

}

}

void Sortmatr1(int M[][size2],int n,int m)

{ for(int i=0;i<n;i++) Sort1( M[i] ,m);

}

1) Что будет выведено в результате выполнения этой программы?

2) Какие элементы матрицы и как будут рассортированы, если в функции Sortmatr1 записать:

  1. for (int i=0; i<n; i+=2) Sort1(M[i], k/2);?

  2. for (int i=0; i<n; i+=2) Sort1(&M[i][к/2], k);?

6. Дан код:

const size2=6; int Sum(int *X, int ); //1

void Sum2(int M[][size2],int ,int, int &, int & ); //2

void MyOut(int *x, int n) //3

{cout<<endl; for(int i=0;i<n;i++)

printf("%5d%c", x[i], (i+1)%size2?' ':'\n'); } //4

int main()

{const n=4,m=6; int A[n][size2]=

{ {4, -3, 2, 0, 5}, {-11, 2, 3},

{5, -6, 4}, {-2, 4, 3, -2,1, 5} }, S1, S2;

MyOut (A[0],n*m); //5

Sum2(A,n,m,S1, S2); cout<<endl<<S1<<" "<< S2; //6

getch(); return 0; }

int Sum(int X[],int m) //7

{ int S=0; for(int j=0; j<m; j++) if (X[j]>0) S+=X[j]; return S; }

void Sum2 (int M[][size2],int n,int m, int &S1, int &S2) //8

{ S1= Sum(M[0] ,n*m/2); //9

S2=Sum(&M[2][0], n*m/2); } //10

В каких строках есть ошибки? Если ошибок нет, что будет выведено?

7. Дан код:

int *p1= new int = 20; int *p2; *p2= new int [ 20];

int *p3= new int[20]={11, 2, 30, -44, -5, 6, 7, 0, 8, 99, 100};

int *p4; p4= new int[20]; int *p5= new int (20);

int *p6= new (int) 20; int *p7= new int :20;

Для каких указателей (p1 — p6) правильно резервируется память для одномерного массива из 20 целых чисел?

8. Дан код:

float *f1= new float[4]; delete[]float;

float *f2= new float[4]; delete[]f2;

float *f3= new float[4]; delete float [4];

float *f4= new float[4]; delete f4;

Для каких переменных правильно освобождается память для одномерного массива?.

9. Пусть const n=5; int ar[n]={-1, 2, 33,4, -5} ; Объясните результат выполнения следующих циклов:

a) for (p=ar, i=0; p+i<=ar+size-1; i++) printf (“%d “, *(p+i));

b) for (p=ar, i=0; p+i<=ar+size-1; p++, i++) printf (“%d “, *(p+i));

c) for (p=ar+size-1; p>=ar; p--) cout<<p<<” “<<*p<<endl;

10. Дан код: int A[5]={0,1,2,3}; //1

for (int *p=A+4; p>A; p--) cout<<(*p)<<" "; //2

Что будет выведено?

Варианты ответов: 1) 3 2 1 0 2) 0 3 2 1 3) 0 1 2 3 0

4) 0 3 2 1 0 5) ошибка (указать, в какой строке).

11. Дан код:

const n=5; int a[n]={-1, 2, 33,4, -5} ;

int *p=a,s=0; for (; p<a+n; p++) s+=*p; //0

int *p1=&a[0]; for ( int s1=0; p1<= &a[n-1]; p1=p1+1) s1=s1+*p1; //1

int *p2,s2; for ( p2=a, s2=0; *p2<a[n-1]; p2++) s2+=*p2; //2

int *p3, s3=0; for ( p3=a; p3<&a[n-1]; p3++, s3+=*p3); //3

int *p4, s4=0; for ( p4=a; p4<a+n; s4+=*p4, p4++ ); //4

Среди строк //1 — //4 найти такие синтаксически правильные строки, которые выполняются так, как операторы в строке //0

12. Дан код:

const n=5; int a[n]={-1, 2, 33,4}, *p ; //1

for (p=a; p<=a+n-1; p+=2) //2

cout<<p<<" "<<(*p)<<" "; //3

Что будет выведено? Если есть ошибки, указать, в каких строках.

13. Дан код:

const n=3; int A[n][n]={{1,2,3},{4,5},{6,7}}, *p;

for (p=A[n-1]; p>A[0]; p-=(n-1)) cout<<(*p)<<" ";

Что будет выведено?

14. Дан код:

const n=3; int A[n][n]={{1,2,3},{-4,-5},{6,7}}, *p;

for (p=A[n-1]; *p>=*A[0]; p-=(n-1)) cout<<(*p)<<" ";

Что будет выведено? Если есть ошибки, объяснить их.

15. Дан код:

const n=4, m=3; int A[n][m]={{1,2,3},{4,5,6},{5}, {0, 22}}, *p1,*p2, S;

for (p1=A[0]; p1<=A[n-1]; p1++)

{ S=0; for (p2=p1; p2<p1+m; p2++) S+=(*p2); cout<<S<<" "; }

Что будет выведено? Если есть ошибки, объяснить их.

  1. Дан код:

const n=4, m=3; int A[n][m]={{1,2,3},{4,5,6},{5}, {0, 22}}, *p1,*p2, S;

for (p1=A[0]; p1<=A[n-1]; p1+=m)

{ S=0; for (p2=p1; p2<=p1+m; p2+=2) S+=(*p2); cout<<S<<" "; }

Что будет выведено? Если есть ошибки, объяснить их.

17. Дан код: char S9b[]="Borland C++", *p9b=S9b, *q9b; //1

* q9b=strstr(p9b, "C++"); //2

int k1, k2;

k1=*q9b-*p9b; //3

k2=q9b-p9b; //4

cout<<endl<<k1<<” “<<k2;

Что будет выведено? Если есть ошибки, указать, в каких строках (//1 — //4).

18. Дан код: char t[]=”Borland Builder”, *q, *p=t ; // 1

q=strstr(p, “Builder”); //2

if (p>q) cout<<”Yes”; else cout<<”No”; //3

if (*p>*q) cout<<”Yes”; else cout<<”No”; //4

Что будет выведено? Если есть ошибки, указать, в каких строках (//1 — //4).

19. Дан код:

char t10[]="Borland Builder", *q10, *p10=t10 ; // 1

q10=strchr(p10, 'B'); //2

if (!(p10-q10)) cout<<endl<<"Yes"; else cout<<endl<<"No"; // 3

if (*p10-*q10) cout<<endl<<"Yes"; else cout<<endl<<"No"; // 4

Что будет выведено? Если есть ошибки, указать, в каких строках (//1 — // 4).

20. Дан код:

char S7[]=" ...Borland Builder"; //1

char *p=S7; *q; //2

q=p+strspn(p," .;:-!?"); //3

cout<<endl<<q<<endl; //4

Что будет выведено? Если есть ошибки, указать, в каких строках (//1 — //4).

21. Дан код:

char *T1="Borland C++" ; //1

char T2[]="Borland C++" ; //2

char T3[20]="Borland C++" ; //3

char *T4; T4="BORLAND C++" ; //4

char T5[15]; T5="Borland C++" ; //5

char *T6; strcpy(T6, "Borland C++" ); //6

char T7[20]; strcpy(T7,"Borland C++") ; //7

В каких строках (//1 — //7) есть ошибки?

22. Дан код:

char T[80]; gets(T); if (strstr(T, “???”)) cout <<1; else cout<<0;

Число 1 (единица) будет выведено, если введём:

  1. ??? (ровно три подряд идущих символа “вопрос” и больше ничего);

  2. Строку подряд идущих символов “?”, количество которых >3.

  3. Любую строку, в которой есть ровно 3 подряд идущих символа“?”. Например, Testing??? или Testing??? of string.

  4. Любую строку, в которой есть не менее трёх подряд идущих символа“?”. Например, Testing?????? или Testing??? of string. или ???Testing???

  5. Один или два подряд идущих символа “?”.

Какие утверждения правильные?

Лабораторная работа 1.

Темы: Связь указателей и одномерных массивов. Динамический одномерный массив.

Требования и общие указания к заданиям:

  • разработать класс для работы с одним или несколькими одномерными динамическими массивами, предусмотрев конструктор, деструктор, методы для ввода, вывода массива и в зависимости от варианта один или несколько методов для обработки массивов. По усмотрению преподавателя в класс можно включить методы, реализующие задачи из нескольких вариантов;

  • предусмотреть цветной вывод результатов. Например, в задаче B.2 все пары точек с одинаковым максимальным расстоянием между ними вывести другим цветом;

  • при работе с массивами должны обязательно использоваться указатели. При этом должны быть приведены различные (не менее трёх) способы организации циклов с использованием указателей (см. 4.1, 4.2, 4.3);

  • результаты из функций должны возвращаться с помощью указателей;

  • множество точек плоскости задано своими координатами в виде двух динамических массивов x[n] и y[n], где (xi, yi ) — координаты iй точки. Аналогично множество точек в пространстве задано своими координатами в виде трёх динамических массивов x[n] , y[n] и z[n], где (xi, yi, zi ) — координаты iй точки. Напомним, что n — не константа, а переменная, являющаяся полем класса.

Варианты заданий.

A. Задачи первого простого уровня.

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

  2. Найдите периметр многоугольника, заданного координатами вершин на плоскости.

  3. Многоугольник задан координатами своих вершин. Определите, находится ли точка с заданными координатами на одной из сторон многоугольника.

  1. N треугольников плоскости заданы длинами своих сторон. Найдите треугольник максимальной площади.

  2. N треугольников плоскости заданы длинами своих сторон. В каждом треугольнике найти наименьшую из трёх сторон. Среди этих наименьших сторон найти наибольшую и длины соответствующего треугольника.

  3. В заданном множестве точек плоскости найти количество точек, которые не попали в круг заданного радиуса с заданным центром. Вывести координаты таких точек.

    1. В заданном множестве точек плоскости найти количество точек в каждой из четвертей.

    2. В заданном множестве точек плоскости найти количество точек, находящихся внутри кольца, ограниченного окружностями с общим центром, радиусы которых r и R (r < R).

    3. В заданном множестве точек плоскости найти все точки, расстояние от которых до заданной точки наименьшее.

    4. Дан массив A, состоящий из n элементов. Сформируйте «сглаженный» массив, заменив в исходном все элементы, кроме крайних, по формуле

При сглаживании используются лишь старые значения элементов массива. Изменённый массив оставить на старом месте.

    1. Дан массив целых чисел. Есть ли среди них общий делитель? Есть ли среди них общее кратное?

B. Задачи второго среднего уровня.

  1. На плоскости задано N точек своими координатами. Найти среди них такую, сумма расстояний от которой до остальных минимальна.

  2. В множестве точек на плоскости найти все пары точек с одинаковым максимальным расстоянием между ними.

  3. Найти расстояние между двумя заданными множествами точек на плоскости, то есть расстояние между наиболее близко расположенными точками этих множеств.

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

  5. Среди заданного множества точек в трёхмерном пространстве M найти такую точку, что шар заданного радиуса с центром в этой точке содержит максимальное количество точек из M.

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

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

  8. Многоугольник задан координатами своих вершин. Определите, является ли данный многоугольник выпуклым.

  9. Многоугольник задан координатами своих вершин. Найдите площадь этого многоугольника.

  10. Заданные точки плоскости рассортировать по возрастанию расстояния от начала координат. Для сортировки использовать алгоритм выбора минимального элемента.

  11. Найти значение многочлена с заданными в виде массива коэффициентами, вычисляя и суммируя значения одночленов.

  12. Найти значение многочлена с заданными в виде массива коэффициентами, используя схему Горнера.

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

  14. В одномерном массиве найти количество различных элементов.

  15. Известно, что в массиве размерности N могут быть только целые числа из диапазона 1..31. Рассортировать эти числа по частоте встречаемости, используя алгоритм обмена.

  16. Сложить два больших целых числа по правилу сложения “в столбик”. Для таких чисел вещественный тип неприемлем, а типа long int недостаточно, так как в числе больше 10 цифр. Для хранения такого числа предлагается использовать одномерный массив, каждый элемент которого представляет собой одну десятичную цифру числа.

C. Задачи повышенной сложности.

  1. На плоскости задано множество точек P и множество прямых L. Найти две такие различные точки из P, что проходящая через них прямая параллельна наибольшему количеству прямых из L.

  2. Среди треугольников с вершинами в заданном множестве точек на плоскости найти такой, стороны которого содержат максимальное количество точек заданного множества.

  3. Из заданного множества точек на плоскости выбрать две различные точки так, чтобы разность между количествами точек, лежащих по разные стороны прямой, проходящей через эти две точки, была наименьшей.

  4. Задано множество прямых на плоскости (коэфициентами своих уравнений). Найти координаты и количество точек пересечения этих прямых. Если в точке пересекается более двух прямых, такую точку считать как одну.

  5. Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств.

  6. На плоскости заданы множество точек P и множество окружностей S. Найти две такие различные точки из P, что проходящая через них прямая пересекается с максимальным количеством окружностей из S.

  7. На плоскости заданы множество точек P и точка d вне его. Найти количество различных троек точек a, b, c из P таких, что четырёхугольник abcd является параллелограмом.

  8. Умножить два полинома заданных различных степеней (не обязательно одинаковых), если коэфициенты хранятся в массивах. Все три полинома вывести на экран в удобном для просмотра виде (коэфициенты, равные 1 или –1, не выводить; не выводить одночлен с нулевым коэфициентом и т. п.).

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

  10. На плоскости задано множество точек. Выделить из этих точек вершины квадрата, на сторонах которого лежит наибольшее количество заданных точек.

  11. Все элементы целочисленного массива, представляющие собой совершенные числа (равные сумме своих делителей), переписать в начало массива, сохраняя их порядок, а остальные элементы — в конец. Новый массив не формировать.

  12. Измените заданный одномерный массив, чтобы в начале стояли все нулевые элементы, затем – отрицательные, а в конце – положительные элементы последовательности. При этом начальный порядок отрицательных (аналогично и положительных) элементов должен быть сохранён. Новый массив не формировать.

  13. Из двух заданных упорядоченных числовых массивов размерности n и m получить новый упорядоченный массив размерности n+m, не используя алгоритма сортировки.

  14. В одномерном массиве найти k-й максимальный элемент. Предусмотреть случай когда такого элемента не существует.

  15. Умножить два больших целых числа по правилу умножения “в столбик”. Для таких чисел вещественный тип неприемлем, а типа long int недостаточно, так как в числе больше 10 цифр. Для хранения такого числа предлагается использовать одномерный массив, каждый элемент которого представляет собой одну десятичную цифру числа.

Лабораторная работа 2.

Тема. Работа со строками.

Требования и общие указания к заданиям.

Обрабатываемый в программе текст должен содержать несколько строк. Но массив строк не формировать, то есть в оперативной памяти хранить одну обрабатываемую строку. Оперативную память резервируем для одной строки. Вводим строку, анализируем её и на её место вводим новую строку (см. пример 3).

В задачах выделения и анализа слов возможны следующие уровни сложности задач:

  • первый, самый простой уровень, предполагает, что слова разделены одним пробелом (6 баллов);

  • задачи незначительно усложняются, если предположить, что между словами может быть несколько пробелов (7 баллов);

  • в задачах следующего уровня предполагается, что между словами может быть любое количество не обязательно одинаковых разделителей. Например, слова могут быть разделены тремя точками (многоточием), после которых следует пробел; или скобкой, запятой и пробелом, как это имеет место в нашем предложении и т. п. (9 баллов);

  • и, наконец, алгоритм и программа ещё более усложняются, если предположить, что слова могут переноситься с одной строки текста на другую строку (10 баллов).

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

Предусмотреть цветной вывод исходного или преобразованного текста. Например, в задаче B10 слова максимальной длины вывести другим цветом.

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

Варианты заданий.

A. Задачи первого простого уровня.

  1. В английском тексте найти общее количество гласных букв.

  2. В тексте найти общее количество символов-разделителей.

  3. В тексте найти общее количество цифр.

  4. Найти номер строки, в которой больше всего цифр.

  5. Сколько раз в каждой строке встречается заданная десятичная цифра?

  6. Из заданного текста выбрать те символы, которые встречаются в нём ровно один раз. Вывести их в том же порядке, как они были в тексте.

  7. Из текста удалить заданный символ, каждый раз сдвигая оставшуюся часть каждой строки “влево”.

  8. Сколько в тексте вопросительных, восклицательных и утвердительных предложений?

B. Задачи второго среднего уровня.

Посимвольный анализ текста.

  1. Проверить, соблюдается ли в тексте баланс круглых скобок. Для каждой открывающей скобки “(“ должна быть найдена соответствующая закрывающая “)”.

  2. Проверить наличие в тексте одного из знаков разделителей (“.” , ”?”, ”!”) перед каждой большой русской буквой.

  3. В тексте найти символ (один, любой), который встречается чаще других.

  4. В каждой строке текста найти символ[ы], который встречается наименьшее количество раз.

  5. В строке найти все английские буквы, которые встречаются чаще других. [Различия между прописными и строчными буквами не делать,] другие символы (русские буквы, разделители, цифры и т.д.) не учитываются. Результат вывести в виде строчных букв. Например, в строке “ABCD abc 123123123111 xyz ABCDEFaB x” такими символами являются “a”, “b”, “c”, которые без учёта регистра повторяются три раза.

  6. Символы строки вывести по возрастанию частоты их встречаемости в строке. [Символы, встречающиеся одинаковое количество раз, должны располагаться по возрастанию их кодов].

  7. Найти и вывести номера строк текста, в которых встречается заданная подстрока и количество её повторений.

Выделение и анализ слов . Как и в предыдущих задачах, массив строк не формируем.

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

  2. В тексте найти количество слов, начинающихся и заканчивающихся гласной русской буквой.

  3. В тексте найти и вывести [без повторений] все слова максимальной длины, не формируя массива слов.

  4. Какие из букв встречаются в одном слове строки? [Какие из букв встречаются в К словах?]

  5. Есть ли символ, который встречается во всех словах строки?

  6. Сколько раз повторяется в тексте каждое слово, которое встречается в нём?

  7. В тексте найти одну пару [все пары] слов, из которых одно является обращением другого ( например, “abcd” и “dcba”).

  8. В тексте найти все слова палиндромы, которые одинаково читаются слева направо и справа налево ( шалаш, поп и т.п.).

Преобразование текста .

  1. В тексте одно введённое слово заменить другим словом, которое также вводится с экрана. При выводе исходной и изменённой строки старое и новое слово выделить другим цветом.

  2. Первую букву каждого слова поменять на прописную букву. При выводе выделить её другим цветом.

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

  4. Из текста удалить все слова заданной длины.

  5. Из каждой строки текста удалить всю оставшуюся после символов “//” часть.

С. Задачи повышенной сложности.

Обработка элементов текста программы на языке С++ как последовательности строк символов.

  1. Определить, является ли заданная последовательность символов идентификатором.

  2. Если заданная последовательность символов является константой целого типа, присвоить её значение переменной такого же типа. Учесть, что константу можно записать как в десятичной, так и в шестнадцатеричной системах счисления.

  3. Если заданная последовательность символов является константой вещественного типа, присвоить её значение переменной такого же типа. Учесть, что константу можно записать как в форме с фиксированной точкой (25.01), так и в экспоненциальной форме (2.3E-5).

  4. Найти и вывести переменные в следующем порядке: сначала типа int, затем float и, наконец, char.

  5. Правильно ли объявлен одномерный числовой массив фиксированной размерности? Учесть, что в качестве размерности может быть явно записанная или определённая предварительно с помощью ключевого слова const целочисленная константа.

  6. Правильно ли объявлен двумерный массив?

  7. Пусть в выражении используются простые переменные, явно записанные константы целого типа и одна из арифметических операций ( +, -, * или /). Есть ли синтаксические ошибки в выражении?

  8. Пусть одной простой переменной присваивается значение другой простой переменной. Есть ли ошибки?

  9. Проверить, есть ли синтаксические ошибки в “операторе” вывода cout, который выводит текст и значения простых переменных.

  10. Проверить, есть ли синтаксические ошибки в “операторе” ввода cin, который вводит значения элементов одномерного массива.

  11. Есть ли синтаксические ошибки в заголовке оператора цикла for?

  12. В синтаксически правильной программе найти номера строк, в которых встречается заданный идентификатор. В комментариях после символов “//” [и между символами “/*” и “*/” ] идентификатор не учитывается.

  13. В синтаксически правильной программе найти номера строк, в которых встречается заданный оператор. В комментариях после символов “//” [и между символами “/*” и “*/” ] оператор не учитывается.

  14. Пусть в сокращённой форме оператора if в случае истинности выполняется простое присваивание одной целочисленной переменной значения другой такой переменной. В логическом выражении после if используется только одна операция сравнения. Есть ли ошибки в таком операторе if?

  15. Проверить правильность расстановки скобок “{” и ”}”. Считать, что в комментариях и в строковых константах эти символы не используются.

Проверить правильность расстановки символов “/*” и “*/” для комментариев в фрагменте программы на языке С++.

Г л а в а 3