Нужно посчитать пройденный путь

110
08 октября 2021, 20:00

Задание: Гусеница ползет по стволу дерева, причем ползти она может только вперед или назад. Список команд размещен на форме. Высота дерева вводится с клавиатуры. Составьте программу, позволяющую определять как общее количество пройденных гусеницей сантиметров, так и высоту, на которой она находится после выполнения каждой команды. Кроме того, определите доползла ли она до верхушки дерева. Примечание 1: не забудьте, что гусеница не может уползти под землю. (*) Примечание 2: пройдя вершину дерева гусеница начинает двигаться вниз.

Есть рабочий код, но нужно дополнить. Не могу понять как посчитать весь пройденный путь (на сколько поднялась и на сколько спустилась).

int val = 0;
private void Add(int addent)
{
    val = val + addent;
    label1.Text = Convert.ToString(val);
}
private void button2_Click(object sender, EventArgs e)
{
    Add(1);    
}
private void button1_Click(object sender, EventArgs e)
{
    Add(2);
}
private void button3_Click(object sender, EventArgs e)
{
    Add(-1);
}
private void button4_Click(object sender, EventArgs e)
{
    Add(-2);
}
private void button5_Click(object sender, EventArgs e)
{
    int a = int.Parse(label1.Text);
    int b = int.Parse(textBox1.Text);
    label2.Text = a == b ? "Гусеница доползла до верхушки" :
    label2.Text = a > b ? "Ещё не бабочка, спускайтесь" :
    label2.Text = a < b ? "Не на вершине, но и не на земле" : label2.Text;
}
Answer 1

Нужно поддерживать две величины - текущую позицию и пройденный путь. Первая строчка реализует одно из примечаний.

private void Add(int addent)
{
   addent = (position + addend) < 0 ? -position: addent;
   position = position + addent;
   path = path + Math.Abs(addent);
Answer 2
    //Судя по Вашему коду, высота дерева вводится в textBox1 - исхожу из этого
    int val = 0,    //  текущая высота
        a   = 0,    //  общее количества пройденных сантиметров
        b;          //  высота дерева
    //  кнопка button5 не нужна
    //  в label2 отображается высота, 
    //  на которой гусеница находится после выполнения каждой команды
    //  для textBox1 добавлено событие (Focus) Leave
    private void textBox1_Leave(object sender, EventArgs e)
    {
        b = Convert.ToInt32(textBox1.Text); //  высота дерева
    }
    private void Add(int addent)
    {
            //  проверка, что высота дерева указана
        if(textBox1.Text.Equals(String.Empty))
        {
            MessageBox.Show("укажите высоту дерева");
            return;
        }
        if ((val + addent) <= 0)
            label2.Text = "Мне под землю рано";
        else if ((val + addent) == b)
        {
            a += addent;
            val += addent;
            label2.Text = "Гусеница доползла до верхушки, высота " + val.ToString();
        }
        else if ((val + addent) > b)
        {
            a   += addent;
                //  следующую строку можно записать короче, но так нагляднее
            val = b - (val + addent - b);   //  из высоты дерева вычитаются  
                                            //  метры, на которые (val + addent)
                                            //  больше высоты дерева
            label2.Text = "Ещё не бабочка, спускаюсь " + val.ToString();
        }
        else
        {
            a   += addent;
            val += addent;
            label2.Text = "Не на вершине, но и не на земле, высота " + val.ToString();
        }
        label1.Text = "всего пройдено " + a.ToString();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        Add(1);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Add(2);
    }
    private void button3_Click(object sender, EventArgs e)
    {
        Add(-1);
    }
    private void button4_Click(object sender, EventArgs e)
    {
        Add(-2);
    }
READ ALSO
Словарь с разными типами значений

Словарь с разными типами значений

В общем, предположим задача получать данные из разных типов файлов: txt,access и т д

99
Приведение типов в дженериках

Приведение типов в дженериках

Есть у меня некоторый обобщённый класс, который делает Request и отдаёт Response:

62
Как добавить все namespace для Unit-теста?

Как добавить все namespace для Unit-теста?

Как добавить namespace TestApp, TestAppController, TestApp

75
Повторное выполнение SQL запроса

Повторное выполнение SQL запроса

Есть веб приложение на PHP + БД на MySQLПосле выполнения какого-либо SQL запроса путем отправки данных через HTML форму, если обновить страницу, то SQL запрос...

94