Постройка спирали из чисел - C#

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуста написать програму на с# в которой пользователь задает любое целое число (оно есть концом масива) и програма строит спираль начиная с нуля или одиницы до етого числа саму частичку кода которая отвечяэт за ввод числа в масив я смог сделать а вот построить спираль не могу. Вот пример кода для ввода числа в масив
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Snake
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = double.Parse(Console.ReadLine());
            for (int i = 1; i <= a; i = i + 1)
                Console.WriteLine(i);
        }
    }
}
Только на ето хватило моих знаний с# Помогите!!! Зарание спасибо!!!

Решение задачи: «Постройка спирали из чисел»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Snake
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("***Програма яка будує спiраль зададаного розмiру з даданим числом закiнчення***");
                Console.WriteLine("Виберiть в яку сторону буде будуватися спiраль (1 - поч. зверху злiва вниз) (2 - поч. зверху злiва на право)");
                Console.WriteLine(" __1__   __2__ ");
                Console.WriteLine(" 1 8 7   1 2 3 ");
                Console.WriteLine(" 2 9 6   8 9 4 ");
                Console.WriteLine(" 3 4 5   7 6 5 ");
                int type = int.Parse(Console.ReadLine()); //Вибираємо тип спіралі
                if (type == 1)
                {
                    Console.WriteLine("Ви вибрали спiраль данного типу");
                    Console.WriteLine(" __1__ ");
                    Console.WriteLine(" 1 8 7 ");
                    Console.WriteLine(" 2 9 6 ");
                    Console.WriteLine(" 3 4 5 ");
                    Console.WriteLine("Введiть розмiр спiралi в форматi вiд 1 до 18(вiд 1x1 до 18х18)");
                    int size = int.Parse(Console.ReadLine()); //Вводимо розмір спіралі NxM
                    Console.WriteLine("Буде побудована спiраль розмiром " + size + "x" + size);
                    Console.WriteLine("Введiть число яким закiнчиться спiраль (max значення {0})", size * size);
                    int finish = int.Parse(Console.ReadLine()); //Число яким закінчується спіраль
                    int start = 1; //Число яким починається спіраль
                    int[,] spiral_nums = new int[start, finish]; //Цикл чисел спіралі від початку до кінця
                    int[,] spiral_build = new int[size, size]; //Цикл який будує спіраль 
                    int row = 0;
                    int col = 0;
                    int dx = 1;
                    int dy = 0;
                    int dirChanges = 0;
                    int visits = size;
                    for (int i = 0; i < spiral_nums.Length; i++)  //Значення {і} означає з якого числа почнеться будуватись спіраль, перші цифри заміняються на нулі в кінці
                    {
                        spiral_build[col, row] = i + 1; /*З якого числа почнеться спіраль (якщо змінити {1} на інше число в умові matrix[col, row] = i + 1)
                                           *Якщо поміняти місцями {col} і {row} в умові (matrix[col, row] = i + 1;) 
                                           *то зміниться напрям за яким будується спіраль (поч. зверху зліва вниз) або (поч. зверху зліва на право)*/
                        if (--visits == 0)
                        {
                            visits = size * (dirChanges % 2) + size * ((dirChanges + 1) % 2) - (dirChanges / 2 - 1) - 2;
                            int temp = dx;
                            dx = -dy;
                            dy = temp;
                            dirChanges++;
                        }
                        col += dx; row += dy; //Як буде будуватись спіраль (поч. зверху зліва вниз)
                    }
                    Console.WriteLine();
                    for (int i = 0; i < size; i++) //будує рядочки
                    {
                        for (int j = 0; j < size; j++) //будує стовпчики
                        {
                            Console.Write(" " + spiral_build[i, j] + " "); // спосіб подачі (робить пробіли між числами)
                        }
                        Console.WriteLine();
                        Console.WriteLine();
                    }
                    Console.ReadKey();
                }
                else if (type == 2)
                {
                    Console.WriteLine("Ви вибрали спiраль данного типу");
                    Console.WriteLine(" __2__ ");
                    Console.WriteLine(" 1 2 3 ");
                    Console.WriteLine(" 8 9 4 ");
                    Console.WriteLine(" 7 6 5 ");
                    Console.WriteLine("***Програма яка будує спiраль зададаного розмiру з даданим числом закiнчення***");
                    Console.WriteLine("Введiть розмiр спiралi в форматi вiд 1 до 18(вiд 1x1 до 18х18)");
                    int size = int.Parse(Console.ReadLine()); //Вводимо розмір спіралі NxM
                    Console.WriteLine("Пpограма будує спiраль розмiром " + size + "x" + size);
                    Console.WriteLine("Введiть число яким закiнчиться спiраль (max значення {0})", size * size);
                    int finish = int.Parse(Console.ReadLine()); //Число яким закінчується спіраль
                    int start = 1; //Число яким починається спіраль
                    int[,] spiral_nums = new int[start, finish]; //Цикл чисел спіралі від початку до кінця
                    int[,] spiral_build = new int[size, size]; //Цикл який будує спіраль 
                    int row = 0;
                    int col = 0;
                    int dx = 1;
                    int dy = 0;
                    int dirChanges = 0;
                    int visits = size;
                    for (int i = 0; i < spiral_nums.Length; i++)  //Значення {і} означає з якого числа почнеться будуватись спіраль, перші цифри заміняються на нулі в кінці
                    {
                        spiral_build[col, row] = i + 1; /*З якого числа почнеться спіраль (якщо змінити {1} на інше число в умові matrix[col, row] = i + 1)
                                           *Якщо поміняти місцями {col} і {row} в умові (matrix[col, row] = i + 1;) 
                                           *то зміниться напрям за яким будується спіраль (поч. зверху зліва вниз) або (поч. зверху зліва на право)*/
                        if (--visits == 0)
                        {
                            visits = size * (dirChanges % 2) + size * ((dirChanges + 1) % 2) - (dirChanges / 2 - 1) - 2;
                            int temp = dx;
                            dx = -dy;
                            dy = temp;
                            dirChanges++;
                        }
                        col += dy; row += dx; //Як буде будуватись спіраль (поч. зверху зліва на право) 
                    }
                    Console.WriteLine();
                    for (int i = 0; i < size; i++) //будує рядочки
                    {
                        for (int j = 0; j < size; j++) //будує стовпчики
                        {
                            Console.Write(" " + spiral_build[i, j] + " "); // спосіб подачі (робить пробіли між числами)
                        }
                        Console.WriteLine();
                        Console.WriteLine();
                    }
                    Console.ReadKey();
                }
                else
                {
                    Console.WriteLine("Введене некоректне число");
                }
            }
            catch
            {
                Console.WriteLine("Помилка");
            }
        }
    }
}

ИИ поможет Вам:


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

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы