2015-12-01 5 views
-2

На данный момент мне интересно, как я могу поменять значения уже в двумерном массиве, в этом случае мне удалось их поменять, однако я не могу показаться способным чтобы поменять их обратно ... Как я могу сделать программу поменять значения назад и вперед для массива?Переключение строк двумерных массивов в c

Код:

#include <stdio.h> 

void main() 
{ 
    //declaration of values 
    int d = 0; 
    char value; 
    float list[5][6], swaplist[5][6]; 
    float average_odd, sum = 0, average_even, sum1 = 0; 

    //Command list so that the user knows what he can do in this program 
    printf("Command list:\t \n\nCommand: \t\t Output: "); 
    printf("\n \"A\" \t\t Declare values of a list.\n \"O\" \t\t Obtain the average value of the even and odd column\n\t\t values in the list.\n"); 
    printf(" \"I\" \t\t Exchange the values on the even columns with the odd ones.\n \"P\" \t\t Print the values of the list.\n \"S\" \t\t End program."); 
    //======================================================================================================== 
    while (d != 1) 
    { 
     printf("\n\nInsert value: "); 
     scanf(" %c", &value); 
     //========================================================================================================= 
     if (value == 'a' || value == 'A') 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       for (int j = 0; j < 6; j++) 
       { 
        printf("Insert value of element %d in column %d: ", i + 1, j + 1); 
        scanf("%f", &list[i][j]); 
        swaplist [i][j] = list[i][j]; 
       } 
      } 
     } 
     //========================================================================================================= 
     if (value == 's' || value == 'S') 
     { 
      d++; 
     } 
     //========================================================================================================= 
     if (value == 'P' || value == 'p') 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       for (int j = 0; j < 6; j++) 
       { 
        printf("%2.2f ", list[i][j]); 
       } 
       printf("\n"); 
      } 
     } 
     //======================================================================================================== 
     if (value == 'o' || value == 'O') 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       for (int j = 0; j < 6; j = j + 2) 
       { 
        sum += list[i][j]; 
       } 
      } 
      for (int i = 0; i < 5; i++) 
      { 
       for (int j = 1; j < 6; j = j + 2) 
       { 
        sum1 += list[i][j]; 
       } 
      } 
      average_even = sum1/15; 
      printf("The average of the even columns = %.2f\n", average_even); 
      average_odd = sum/15; 
      printf("The average of the odd columns = %.2f\n", average_odd); 
     } 
     //======================================================================================================= 
     if (value == 'i' || value == 'I') 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       for (int j = 0; j < 6; j = j + 2) 
       { 
        list[i][j] = swaplist[i][j+1]; 
       } 
      } 
      for (int i = 0; i < 5; i++) 
      { 
       for (int j = 1; j < 6; j = j + 2) 
       { 
        list[i][j] = swaplist[i][j - 1]; 
       } 
      } 
     } 
    } 
} 
+0

Объявление функции 'main()' всегда 'int', never' void' – user3629249

+0

@ user3629249 Это неверно. Стандарт C определяет main как "5.1.2.2.1. Запуск программы, пункт 1: ... или каким-либо другим способом реализации .'. Я предлагаю вам взглянуть на микроконтроллеры, где обычно используется основной фон. – this

+1

Можете ли вы объяснить, что вы подразумеваете под «подкачкой значений назад и вперед»? Значения свопинга не имеют никакого направления, оно только обменивает значение, делая это дважды, приведет к исходным значениям. – mch

ответ

0

После замены, вы не изменить состояние списка подкачки. Сначала своп-список является копией нераспределенной матрицы. Вы не меняете его, чтобы отражать изменения в матрице и не отслеживать какое-либо другое состояние.

Вам не нужен своп-список. Я полагаю, что вы просто делаете регулярную замену прилегающего колонн по ячейкам:

if (value == 'i' || value == 'I') { 
     for (int i = 0; i < 5; i++) { 
      for (int j = 0; j < 6; j = j + 2) { 
       float swap = list[i][j]; 

       list[i][j] = list[i][j + 1]; 
       list[i][j + 1] = swap; 
      } 
     } 
    } 

Это переключает матрицу на повторных свопы.

+0

Спасибо большое, я не понимаю, почему так много пустых голосов, пожалуйста, дайте мне знать, если это противоречит правилам такого рода сообщений, я просто пытаюсь найти наиболее эффективный способ нападая на эту проблему, снова спасибо большое! –

Смежные вопросы