- •Лабораторная работа №1 Линейные и разветвляющиеся алгоритмы
- •Арифметические выражения
- •Операции с целыми числами
- •Логические выражения
- •Организация ветвлений в алгоритмах
- •Лабораторная работа №2 Циклические алгоритмы
- •Рекуррентные последовательности
- •Вычисление характеристик числовой последовательности
- •Определение свойства числовой последовательности
- •Формирование массива Пример
- •Вычисление характеристик массива
- •Модификация массивов
- •I часть
- •II часть Пример
- •III часть
- •Лабораторная работа №4 «Двумерные массивы»
- •Вывод элементов
- •Вычисление характеристик матриц
- •Модификация
- •Литература
II часть Пример
Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.
Вариант программы на языке С
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
/*Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.
*/
int main()
{
int n, i, j;
int *a;
setlocale(LC_ALL, "");
srand(time(0));
printf("Введите n: ");
scanf("%d", &n);
// Выделяем память для массива.
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 - 1; i++)
// правая граница на 1 меньше количества элементов,
// т.к. на каждом шаге мы проверяем текущий и
// следующий после текущего элементы.
{
if(a[i] == a[i+1])
{
// Сдвигаем правую часть массива.
for(j = i + 1; j < n - 1; j++)
a[j] = a[j + 1];
// Уменьшаем n (размер массива при этом не изменяется -
// мы просто используем только первые n элементов).
n--;
}
}
// Выводим результат.
printf("Результат: ");
for(i = 0; i < n; i++)
printf(" %d", a[i]);
printf("\n");
// Освобождаем память.
free(a);
return 0;
}
Вариант программы на языке С++
#include <iostream>
#include <locale>
#include <cstdlib>
#include <ctime>
using namespace std;
/*Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.
*/
int main()
{
int n;
int *a;
setlocale(LC_ALL, "");
srand(time(0));
cout << "Введите n: ";
cin >> n;
// Выделяем память для массива.
a = new int[n];
for(int i = 0; i < n; i++)
a[i] = rand() % 3;
cout << "Массив: ";
for(int i = 0; i < n; i++)
cout << " " << a[i];
cout << endl;
for(int i = 0; i < n - 1; i++)
// правая граница на 1 меньше количества элементов,
// т.к. на каждом шаге мы проверяем текущий и
// следующий после текущего элементы.
{
if(a[i] == a[i+1])
{
// Сдвигаем правую часть массива.
for(int j = i + 1; j < n - 1; j++)
a[j] = a[j + 1];
// Уменьшаем n (размер массива при этом не изменяется -
// мы просто используем только первые n элементов).
n--;
}
}
// Выводим результат.
cout << "Результат:";
for(int i = 0; i < n; i++)
cout << " " << a[i];
cout << endl;
// Освобождаем память.
delete[] a;
return 0;
}
Задания для самостоятельного решения
Дан массив размера N и целое число K (1 ≤K ≤ N). Удалить из массива элемент с порядковым номером K.
Дан массив размера N. После каждого отрицательного элемента массива вставить элемент с нулевым значением.
Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и его содержимое.
Дан массив размера N и два целых числа K и M (1 ≤K ≤ N, 1 ≤ M ≤ 10). Перед элементом массива с номером K вставить M новых элементов с нулевыми значениями
Дан массив размера N. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива
