Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C++ / Lab 4

.txt
Скачиваний:
7
Добавлен:
13.05.2017
Размер:
1.88 Кб
Скачать
#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <time.h>
#define N 100
using namespace std;

int *Z[N] = {}; //Массив для определения местоположения нуля
int index = 0; //счетчик числа нулей
int x[N] = {}, y[N] = {}; 
int col; //количество элементов массива
bool answer = 1;

void inic()
{
	for (int *k = x; k < (x + col); k++)
		*k= rand() % 3;
}

void printmas(int t[])
{
	for (int *k = t; k < (t + col); k++)
		cout << *k << "\t";
}

void findzero()
{
	for (int *k = x+2; k < (x + col); k++) //начинаем со второго элемента, потому что нет -1 и -2 элементов
	{
		if ((*k) == 0)
		{
			Z[index] = k;
			index++;
		}
	}
}

int main()
{
	setlocale(LC_ALL, "Russian");
	srand(time(0));
	
	while (answer)
	{
		while (col <= 1)
		{
			cout << "Введите количество элементов массива" << endl;
			cin >> col;
			if (col<1) cout << "Количество элементов должно быть положительным" << endl;
			if (col == 1) cout << "В массиве не может быть один элемент" << endl; //иначе теряется смысл сложения с предыдущими элементами
		}

		cout << "Исходный массив" << endl;
		inic();
		printmas(x);

		for (int *k = x; k < (x + col); k++)
			y[k-x] = *k; //копируем массив
		
		findzero();
		if ((index != 0)||(*(x + 1) == 0)||(*x == 0))
		{
			if (*x == 0) y[0] = *(x + col - 1) + *(x + col - 2);
			if (*(x + 1) == 0) y[1] = *(x + col - 1) + *x; //если один из первых двух элементов равен 0, то для суммирования берутся элементы с конца массива
			if (index != 0)
				for (int i = 0; i < index; i++)
					y[Z[i]-x] = *(Z[i] - 1) + *(Z[i] - 2);
			cout << "\nМассив, в котором каждый 0 заменен суммой двух предыдущих элементов" << endl;
			printmas(y);
		}

		else
			cout << "\nВ массиве нет нулей"; 
		
		index = 0; col = 0;
		cout << "\nПродолжить?" << endl;
		cin >> answer;

	}
	return 0;
}
Соседние файлы в папке C++