- •Лабораторная работа №1 Линейные и разветвляющиеся алгоритмы
- •Арифметические выражения
- •Операции с целыми числами
- •Логические выражения
- •Организация ветвлений в алгоритмах
- •Лабораторная работа №2 Циклические алгоритмы
- •Рекуррентные последовательности
- •Вычисление характеристик числовой последовательности
- •Определение свойства числовой последовательности
- •Формирование массива Пример
- •Вычисление характеристик массива
- •Модификация массивов
- •I часть
- •II часть Пример
- •III часть
- •Лабораторная работа №4 «Двумерные массивы»
- •Вывод элементов
- •Вычисление характеристик матриц
- •Модификация
- •Литература
III часть
Пример
Дано целое число L (L> 1) и целочисленный массив размера N. Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением (Назовем серией группу подряд идущих одинаковых элементов).
Вариант программы на языке С
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n, l, i, j, k;
int *a;
setlocale(LC_ALL, "");
srand(time(0));
printf("Введите n: ");
scanf("%d", &n);
printf("Введите l: ");
scanf("%d", &l);
// Выделяем память для массива.
a = (int *) malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
a[i] = rand() % 3;
printf("Массив: ");
for(i = 0; i < n; i++)
printf(" %d", a[i]);
printf("\n");
for(i = 0; i < n; )
{
for(j = i + 1; j < n && a[i] == a[j]; j++)
;
k = j - i; // k - размер серии,
if(k > 1 && k < l)
// если с i-го элемента начинается серия,
// длина которой меньше l
{
a[i] = 0;
// Сдвигаем правую часть массива.
for(; j < n; j++)
a[j - (k - 1)] = a[j];
// Уменьшаем n (размер массива при этом не изменяется -
// мы просто используем только первые n элементов).
n -= k - 1;
i++;
}
else // пропускаем серию
i += k;
}
// Выводим результат.
printf("Результат: ");
for(i = 0; i < n; i++)
printf(" %d", a[i]);
printf("\n");
// Освобождаем память.
free(a);
return 0;
}
Вариант программы на языке С++
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n, l, i, j, k;
int *a;
setlocale(LC_ALL, "");
srand(time(0));
printf("Введите n: ");
scanf("%d", &n);
printf("Введите l: ");
scanf("%d", &l);
// Выделяем память для массива.
a = (int *) malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
a[i] = rand() % 3;
printf("Массив: ");
for(i = 0; i < n; i++)
printf(" %d", a[i]);
printf("\n");
for(i = 0; i < n; )
{
for(j = i + 1; j < n && a[i] == a[j]; j++)
;
k = j - i; // k - размер серии,
if(k > 1 && k < l)
// если с i-го элемента начинается серия,
// длина которой меньше l
{
a[i] = 0;
// Сдвигаем правую часть массива.
for(; j < n; j++)
a[j - (k - 1)] = a[j];
// Уменьшаем n (размер массива при этом не изменяется -
// мы просто используем только первые n элементов).
n -= k - 1;
i++;
}
else // пропускаем серию
i += k;
}
// Выводим результат.
printf("Результат: ");
for(i = 0; i < n; i++)
printf(" %d", a[i]);
printf("\n");
// Освобождаем память.
free(a);
return 0;
}
Задания для самостоятельного решения
Дано целое число K (K> 1) и целочисленный массив размера N. Поменять местами первую серию массива и его серию с номером K. Если серий в массиве меньше K, то вывести массив без изменений.
Дано целое число K (K> 0) и целочисленный массив размера N. Поменять местами последнюю серию массива и его серию с номером K Если серий в массиве меньше K, то вывести массив без изменений
Дан целочисленный массив размера N. Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент.
Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент
Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1. Преобразовать массив, уменьшив каждую его серию на один элемент.
