Загрузка...

Помощь с C++

Тема в разделе C/C++ создана пользователем lztkick 14 апр 2020. 669 просмотров

Загрузка...
  1. lztkick
    lztkick Автор темы 14 апр 2020 Заблокирован(а) 14 28 сен 2019
    Вообщем, есть задача, хелп плиз (не шарю)
    Корабль может перемещаться в четырёх направлениях (север, восток, юг, запад) и принимать четыре команды (вперёд, вправо, назад, влево). Корабль шёл сначала по некоторому курсу, а затем его курс был изменён согласно заданной команде. Определить новый курс корабля
     
  2. 1mNotS0rr1
    1mNotS0rr1 14 апр 2020 Заблокирован(а) 121 26 май 2018
    Влево
     
    1. lztkick Автор темы
      1mNotS0rr1, а кодом можно как-то?
  3. volodar
    volodar 14 апр 2020 не дурак 40 7 май 2019
    назад
     
  4. Dexbomba
    это вообще возможно решить :pepebruh:
     
    1. Fender_inactive2697143
      @Dexbomba, да. Если корабль шёл на север, дали команду "налево", то он будет идти на запад.
  5. volodar
    volodar 14 апр 2020 не дурак 40 7 май 2019
    1. Fender_inactive2697143
      raw, переписать код не так уж сложно. Кста, можешь посмотреть мой вариант решения задачи.
  6. psb
    psb 14 апр 2020 Заблокирован(а) 18 5 апр 2020
  7. n19ht1n9ale
    n19ht1n9ale 19 апр 2020 Заблокирован(а) 15 19 янв 2019
    так создай два инта: направление и команда. 1-север, 2-восток и тд. Потом то же самое для команды, и пропиши 4 if (if(way==1)&&(move==1)
    { cout<<"корабль плывет на север"<<endl;
    }
    ну что то типа того, и все
     
    1. Посмотреть предыдущие комментарии (2)
    2. Fender_inactive2697143
      n19ht1n9ale, но чувак ниже, это и есть я. Увы, но я не могу согласиться с тем, что я сделал так же, как предлагаешь ты.
    3. LitleDuck
      n19ht1n9ale, лучше через enum сделать это всё, по факту там изи
    4. n19ht1n9ale
      Fender_inactive2697143, хз, ибо до свича у нас "по сути" схожее, но да в самом свиче умно и не как у меня(я вообще не писал даже)
  8. Fender_inactive2697143
    lztkick, решил на Си. Будут вопросы, задавай. Кстати, получается, что при команде вперёд направление корабля меняться не будет. Ведь он продолжает двигаться в текущем направлении, вот такую небольшую фишку заметил.
    C
    #include <stdio.h>
    #include <string.h>
    #include <stdint.h>
    #include <stdbool.h>

    int main()
    {
    // Вводим курс:
    char direction[8];
    scanf("%s", &direction[0]);


    // Вводим команду:
    char command[8];
    scanf("%s", &command[0]);

    char* directions[4] = { "север", "восток", "юг", "запад" };
    char* commands[4] = { "вперед", "направо", "назад", "налево" };

    // Объявяем значения, которые переменные "команда" и "направление" ...
    // ... не достигнут при текущих обстоятельствах.
    // Комманд и направлений по 4 штуки (в массиве индексация с 0).
    // Описанные меры необходимы для проверки производимой ниже.
    uint8_t currentDirection = 5;
    uint8_t currentCommand = 5;

    for (uint8_t i = 0; i < 4; i++) {
    if ( strcmp(direction, directions[i]) == 0 ) {
    currentDirection = i;
    break;
    }
    }

    for (uint8_t i = 0; i < 4; i++) {
    if ( strcmp(command, commands[i]) == 0 ) {
    currentCommand = i;
    break;
    }
    }

    // Ошибки при вводе (проверка провалена):
    bool isInvalidValue = false;
    if (currentDirection == 5) {
    printf("Направление указано неверено!\n");
    isInvalidValue = true;
    }

    if (currentCommand == 5) {
    printf("Команда указана неверено!\n");
    isInvalidValue = true;
    }

    if (isInvalidValue) {
    return 0;
    }

    char* finalDirection;

    switch(currentCommand) {

    case 0: // вперёд
    finalDirection = direction; // прикольная команда ;-) корабль продолжает двигаться в том же направлении
    break;

    case 1: { // вправо
    int8_t h = currentDirection + 1;
    finalDirection = directions[(h == 4) ? 0 : h];
    break;
    }


    case 2: { // назад
    int8_t h = currentDirection - 2;
    finalDirection = directions[(h < 0) ? currentDirection + 2 : h];
    break;
    }

    case 3: { // влево
    int8_t h = currentDirection - 1;
    finalDirection = directions[(h < 0) ? 3 : h];
    break;
    }
    }

    printf("%s\n", finalDirection);

    return 0;
    }
     
Top