Добавить комментарий

Решение задачи

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

#include <iostream>
 
using namespace std;
 
// Task 1
/*
const int MAX_X = 10;
const int MAX_Y = 1;
char t[MAX_Y][MAX_X] = { {9, 8 ,7 ,6, 5, 4, 3, 2, 1, 0 } };
char s[] = "This is a scrolling text test\x0";
*/
 
// Task 2
const int MAX_X = 8;
const int MAX_Y = 7;
char t[MAX_Y][MAX_X] = {
	{ 6,  7,  8,  9, 10, 11, 12, 13	},
	{ 5, 30, 31, 32, 33, 34, 35, 14 },
	{ 4, 29, 46, 47, 48, 49, 36, 15 },
	{ 3, 28, 45, 54, 55, 50, 37, 16 },
	{ 2, 27, 44, 53, 52, 51, 38, 17 },
	{ 1, 26, 43, 42, 41, 40, 39, 18 },
	{ 0, 25, 24, 23, 22, 21, 20, 19 }
};
char s[] = "The quick brown fox jump over the lazy dog\x0";
 
 
 
int main()
{
	int symbol_index = 0;
	int text_size = strlen(s);
 
	// Count number of frames for one full roll: screen size + text size 
	int max_frames = MAX_X * MAX_Y + text_size;
 
	for (int frame_index = 0; frame_index < max_frames; frame_index++)
	{
		for (int y = 0; y < MAX_Y; y++)
		{
			for (int x = 0; x < MAX_X; x++) 
			{
 
				// Get symbol index for this position on screen
				symbol_index = frame_index - t[y][x];
 
				// Print symbol by index if index within the text string
				if (symbol_index >= 0 && symbol_index < text_size)
					cout << s[symbol_index] << " ";
				else // Print space for all other positions 
					cout << "  ";
			}
			cout << endl;
		}
 
		getchar();
	}
    return 0;
}