Отчетный период, отправлять содержание матрицы

привет сообщество нуждалось в Вашей помощи с этим отчетным периодом C ++, важная одинокая использовать основные циклы, как while if, for... (не функционируй)... это что у меня есть только выбор 1, только я нуждаюсь, если они могут, чтобы это исправлять или давать мне какие-то советы. Выбор я не поместил 2, потому что у меня есть то же самое, но с параметрами, вложенный, зная, как решать выбор 1 я делаю выбором 2. Я ОСТАВЛЯЮ ИМ ОБРАЗ ССЫЛКИ. Чтобы это понимать, когда 1 нажимает на выбор этот дебет делать оборот краев (линии и колонны) 1 блок в часовом смысле. хоть бы смогите помогать мне... я Вам благодарен за них!

ejercicio_propuesto

main(){
char M[5][5];
int i, j, aux, opcion;

//crear natriz
for(i=0; i<5; i++){
    for(j=0; j<5; j++){
    M[i][j]={' '};
    }
}


M[0][0]='a';    M[2][4]='g';
M[0][1]='b';    M[3][0]='n';
M[0][2]='c';    M[3][4]='h';
M[0][3]='d';    M[4][0]='m';
M[0][4]='e';    M[4][1]='l';
M[1][0]='p';    M[4][2]='k';
M[1][4]='f';    M[4][3]='j';
M[2][0]='o';    M[4][4]='i';


//Imprimir matriz inicial
for(i=0; i<5; i++){
    for(j=0; j<5; j++){
    printf ("%2c|",M[i][j]);
    }
cout<>opcion;


      if(opcion==1){
            aux=M[4][4];     

            if(i==0){ 

                for (i<5; i=0; i++){
                    for(j<5; j=1; j--){
                    M[0][j]=M[0][j-1];

                    }
                }
            }


            if(j==0){ //columna 0
                for(i=0; i<5; i++){
                    for(j=0; j<5; j++){
                    M[i][0]=M[i+1][0];  
                    }   
                }

            }

            if(i==4){ //fila 4
                for(i=0; i<5; i++){
                    for(j=0; j<5; j++){
                    M[4][j]=M[4][j+1];
                    }   
                }   
            }

            if(j==4){ //columna 4
                for(i<5; i=0; i--){
                    for(j<5; j=0; j--){
                    M[i][4]=M[i-1][4];  
                    }   
                }
            }
            M[3][4]=aux;

    }//fin opcion 1


    if(opcion<1 || opcion>3){ //vuelve a preguntar
    cout<<"Digite una opcion, 1=giro Derecha, 2=giro Izquierda, 9=Salir :";
    cin>>opcion;    
    }

    if (opcion==9) //termina
    opcion=9;

    //Imprimir matriz
    system("cls");
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
        printf ("%2c|",M[i][j]);
        }
    cout<

2
задан 01.11.2019, 12:16
3 ответа

Я pareciГі интересный твой вопрос и decidГ - давать ему попытку и, нужно объяснять какие-то вещи:

Восток у упражнения есть некая комплексность, которая заканчивает тем, что является неразборчивой без функций, он состоит fГЎcil в том, чтобы реализовывать, однако, не является хорошей prГЎctica помещать все внутри main, чтобы решать проблему, asГ - что я буду объяснять весь контент и в конце концов dejarГ© соединение со всем cГіdigo внутри main для propГіsito твоего упражнения.

Давайте Инициализироваться :)

В упражнении, мы нуждаемся в том, чтобы "покрутить" круговым способом массив, подход, который я взял, использует 2 массива, одна, где ты сохраняешь стоимость и другую, где ты действуешь, чтобы реализовывать необходимые изменения, asГ - который это оставляет нам с одной funciГіn, чтобы налаживать стоимость в "конечном" массиве:

void array_set(char dst[MAX_LEN][MAX_LEN], char src[MAX_LEN][MAX_LEN]) {
  for (int i = 0; i < MAX_LEN; i++) 
    for (int j = 0; j < MAX_LEN; j++) 
      dst[i][j] = src[i][j];
}

Следующие за этим, я осуществил ее funciГіn, чтобы крутить к левой стороне:

// Mueve el contenido de forma circular hacia la derecha en el array multidimensional.
void rotate_left(char a[MAX_LEN][MAX_LEN]) {
  char newArr[MAX_LEN][MAX_LEN] = {0}; // Array de destino.

  // Primero rotamos los valores de la primera fila hacia la izquierda.
  for (int i = 0; i < MAX_LEN - 1; i++) 
    newArr[0][i] = a[0][i + 1];

  // Movemos hacia arriba todos los valores de la ultima columna.
  for (int i = 0; i < MAX_LEN - 1; i++) 
    newArr[i][MAX_LEN - 1] = a[i + 1][MAX_LEN - 1];

  // Movemos hacia la derecha todos los valores de la ultima fila.
  for (int i = 0; i < MAX_LEN - 1; i++)
    newArr[MAX_LEN - 1][i + 1] = a[MAX_LEN - 1][i];

  // Por ultimo, movemos la primera columna hacia abajo.
  for (int i = 0; i < MAX_LEN - 1; i++) 
    newArr[i + 1][0] = a[i][0];

  array_set(a, newArr);
}

то, что делает эту funciГіn, состоит в том, чтобы двигать стоимость одной matrГ-z в другую пока меняются индексы судьбы, комментарии в ней funciГіn показывают то, что делает каждый цикл for.

Для нее funciГіn, что крутит контент к правой стороне, - главным образом, противоположность:

// Mueve el contenido de forma circular hacia la izquierda en el array multidimensional.
void rotate_right(char a[MAX_LEN][MAX_LEN]) {
  char newArr[MAX_LEN][MAX_LEN] = {0};

  // Movemos todos los valores de la primera fila hacia la derecha.
  for (int i = 0; i < MAX_LEN - 1; i++) 
    newArr[0][i + 1] = a[0][i];

  // Movemos los valores de la última columna hacia abajo.
  for (int i = 0; i < MAX_LEN - 1; i++) 
    newArr[i + 1][MAX_LEN - 1] = a[i][MAX_LEN - 1];

  // Movemos hacia la izquierda los valores de la última fila.
  for (int i = 0; i < MAX_LEN - 1; i++)
    newArr[MAX_LEN - 1][i] = a[MAX_LEN - 1][i + 1];

  // Por ultimo, movemos la primera columna hacia arriba.
  for (int i = 0; i < MAX_LEN - 1; i++) 
    newArr[i][0] = a[i + 1][0];

  array_set(a, newArr);
}

Сейчас мы нуждаемся в одной funciГіn, что взялся за то, чтобы печатать ее matrГ-z перед тем, как выбирать:

// Imprime el contenido del array.
void print_array(char arr[MAX_LEN][MAX_LEN]) {
  std::cout << '\n';
  for (int i = 0; i < MAX_LEN; i++)
    for (int j = 0; j < MAX_LEN; j++)
      std::cout << '\t' << arr[i][j] << (((j + 1) == MAX_LEN)? '\n': ' ');
  std::cout << '\n';
}

С этим уже у нас есть она implementaciГіn заверши алгоритма, определенного в упражнении, этих двух функциях они способны крутить контент кругового способа в обоих массивах, только мы должны соединять все в том же предмете:

// Punto de inicio.
int main() {
  // El array que vamos a operar.
  char arr[MAX_LEN][MAX_LEN] = {
    { 'a', 'b', 'c', 'd', 'e' },
    { 'p', ' ', ' ', ' ', 'f' },
    { 'o', ' ', ' ', ' ', 'g' },
    { 'n', ' ', ' ', ' ', 'h' },
    { 'm', 'l', 'k', 'j', 'i' },
  };

  while (1) {
    print_array(arr);
    std::cout << "Opciones: \n"
              << "\t1. Girar izquierda\n\t2. Girar derecha.\n\t9. Salir.\n\n"
              << "Elegir: "; 

    int opt = 0;     // Opción a ejecutar.
    std::cin >> opt; // No hay check de los datos.
    switch (opt) {
      case 1: rotate_left(arr); break;
      case 2: rotate_right(arr); break;
      case 9: return 0;
      default: std::cout << "Opcion invalida.\n"; break;
    }
  }
}

Восток алгоритм может быть оптимизированным для большего результата, asГ - что старается улучшать это mГЎs, что ты смог :)

Ссылки:

  • AquГ - оставил тебе repl.it с нею soluciГіn функционируя, он та soluciГіn, что escribГ - в этом ответе.
  • Восток другой repl.it состоит та soluciГіn без функций в том, что он просит твое упражнение.

В ссылках наверху есть так называемый макрос MAX_LEN, используется, чтобы определять длину (квадратных) массивов, на которых ты будешь действовать, если из-за какой-то razГіn оно не функционирует cГіdigo, он добавляет: #define MAX_LEN (5) в начало файла и конечно, что оно функционирует.

типов Привета!

2
ответ дан 01.12.2019, 14:41
  • 1
    ты послал их себе!!! благодарный. то, о чем я пришел к заключению, состоит в том, что самое важное состоит в том, чтобы использовать 2 массива, не 1, как это делала кроме других вещь... ОЧЕНЬ БЛАГОДАРНЫЙ! – Soplandocartucho 02.11.2019, 23:32
  • 2
    БОЛЬШОЕ СПАСИБО В ТЕЧЕНИЕ ТВОЕГО ВРЕМЕНИ!!, я проанализирую это и прокомментирую тебе, так как даже есть вещи, что я не понимаю их, но касаются мне ami искать это. – Soplandocartucho 07.11.2019, 21:24
  • 3
    То, что ты не понимаешь, ты можешь спрашивать это aquí и я издаю мой ответ :) – NaCl 07.11.2019, 21:26

Чтобы крутить элементы perifГ©ricos массива я думаю, что он много mГЎs просто использовать второстепенный вектор:

char* exterior[] = { &M[0][0], &M[0][1], &M[0][2], &M[0][3],
                     &M[0][4], &M[1][4], &M[2][4], &M[3][4],
                     &M[4][4], &M[4][3], &M[4][2], &M[4][1],
                     &M[4][0], &M[3][0], &M[2][0], &M[1][0] };

Из этой формы мы можем реализовывать ротации относясь к вышеупомянутым элементам линейной формы. Ощутись, что мы объявили вектор указателей, таким образом что мы можем изменять прямо стоимость массива M.

AsГ, - чтобы реализовывать одну rotaciГіn античасовая мы bastarГ - в с таким циклом, который:

     char temp = *exterior[0];
     for(int i=0; i<15; i++)
     {
       *exterior[i] = *exterior[i+1];
     }
     *exterior[15] = temp;

В то время как, чтобы делать одну rotaciГіn в часовом чувстве:

     char temp = *exterior[15];
     for(int i=15; i>0; i--)
     {
       *exterior[i] = *exterior[i-1];
     }
     *exterior[0] = temp;
1
ответ дан 01.12.2019, 14:41
  • 1
    друг возможный посылать có я говорю, что я завершаю с librerí эксперт, который ты используешь?? это agradecerí во многий. – Soplandocartucho 07.11.2019, 21:17
  • 2
    có я говорю, что полным является тот, которого ты видишь..., создай массив и помести один из двух алгоритмов, которые ты видишь... каждый раз, когда ты назвал один из них внешним кольцом массива rotará в чувстве или в другом – eferion 08.11.2019, 12:24
  • 3
    aa ok я понимаю, спасибо. – Soplandocartucho 08.11.2019, 22:57
if(opcion == 1) {

  for(i=0; i<5; i++){

    for(j=0; j<5; i++){ 

      if(M[i][j] != ' '){

        if(M[i][j] == 'A'){
          M[i][j] == 'P';
        }

        else {
          M[i][j]--;
        }
      }
    }
  }
}
-1
ответ дан 01.12.2019, 14:41
  • 1
    Qué у него 65 есть специального? Обработай информацию, которому твои рекомендации были ясными для любого, который читал бы твой ответ сейчас и в будущем. :) И, если ты хочешь показать có mo делать то, что ты говоришь используя có я говорю, настолько лучше – Alfabravo 01.11.2019, 20:13
  • 2
    Считай пожалуйста оставлять explicació n, так как это больше có я говорю, что они улучшают много твой вклад, рекомендую тебе читать CГіmo отвечать – Aprendiz 01.11.2019, 20:36
  • 3
    Спасибо за твой contribució n Дэвис, важно проверять CГіmo отвечать и издавать твой ответ, привет! – Jorgesys♦ 01.11.2019, 20:53