Важная информация
Показано с 1 по 6 из 6

Тема: Помогите решить

  1. #1 Помогите решить 
    Новичок
    Регистрация
    23.03.2017
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Задана матрица размером NxM. Получить массив B , присвоив его k- му элементу значение 1, если строка матрицы симметрична, и значение 0- в противном случае.
    С вводом матрицы,т.е запращивание размерности и элементов
    Спасибо, буду благодарна
     

  2. #2  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Чем так пугают ответы?
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
     

  3. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,846
    Сказал(а) спасибо
    1,815
    Поблагодарили 945 раз(а) в 807 сообщениях
    Записей в блоге
    1
    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. int main (int argc, char *argv[])
    6. {
    7. /**  Переменные   **/
    8.    int M, N;     //  Строки , Столбцы
    9.    int ix, iy;   //  ix - столбец  iy - строка
    10.  
    11.    int Simm;     //  Симметричность
    12.  
    13. /**  Ввод данных с клавиатуры   **/
    14. cout << endl << "Vvedi chislo strok: ";
    15. cin >> M;
    16.     
    17. cout << "Vvedi chislo stolbcov: ";
    18. cin >> N;
    19. cout << endl;   //  Просто на след строку
    20.  
    21.     int a[N][M];
    22.     int b[M];
    23.  
    24. /**  Вводим матрицу с клавиатуры  **/
    25.   //  Перебираем строки
    26. iy = 0;
    27. while (iy < M)
    28.     { ix = 0;
    29.      //  Идём по строке (т.е. фигурирует номер столбца)
    30.     while (ix < N)
    31.        {
    32.  
    33.        cout << endl << "Pos [" << ix << ", " << iy << "]: ";
    34.        cin >> a[ix][iy];
    35.        //a[ix][iy] = (rand() % 65) - 25;
    36.  
    37.        ix++;    //  Положение в строке + 1
    38.        }
    39.     iy++;    //  Следующая строка
    40.     }
    41.  
    42. /**  Вывод матрицы   **/
    43.   //  Перебираем строки
    44. iy = 0;
    45. while (iy < M)
    46.     { ix = 0;
    47.      //  Идём по строке (т.е. фигурирует номер столбца)
    48.     while (ix < N)
    49.        {
    50.        cout << a[ix][iy] << "\t";
    51.        ix++;    //  Положение в строке + 1
    52.        }; cout << endl;
    53.     iy++;    //  Следующая строка
    54.     }
    55.  
    56.  
    57. /**  Обработка матрицы   **/
    58.   //  Перебираем строки
    59. iy = 0;
    60. while (iy < M)
    61.     {
    62.  
    63.       Simm = 1;
    64.       ix = 0;
    65.      //  Идём по строке (т.е. фигурирует номер столбца)
    66.     while (ix < N / 2)
    67.        {
    68.           
    69.           if ( a[ix][iy] != a[N - ix - 1][iy] )
    70.           {
    71.             Simm = 0;
    72.             break;
    73.           }
    74.           ix++;    //  Положение в строке + 1
    75.        };
    76.     b[iy] = Simm;
    77.     iy++;
    78.     }
    79.  
    80. cout << endl;  // Просто переведём на след строку
    81. // И выведем все элементы массива B
    82. iy = 0;
    83. while (iy < M)
    84.     {
    85.        cout << "Stroka: " << iy << "\t";
    86.        cout << "Simmetrichnost = " << b[iy] << "\t" << endl;
    87.     iy++;    //  Следующая строка
    88.     }
    89.  
    90.   system("pause");
    91.  
    92.   return 0;
    93. }
    Последний раз редактировалось >Quiet Snow<; 25.03.2017 в 17:44.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
     

  4. Пользователь сказал cпасибо:

    Free Admin (27.03.2017)

  5. #4  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    int a[N][M];
    А ничего, что размер статического массива должен быть константой? Статический массив - не то же самое, что статическая переменная, являющаяся массивом, это может быть и автоматическая переменная, так как статичность здесь имеет другой смысл. Место на все автоматические переменные выделяется при вызове функции, а локальные переменные получают значения в процессе её исполнения. И даже если размеры сделать глобальными и ввести в вызывающем коде, то и тогда суммарный размер автоматических переменных любой функции должен быть известен на этапе компиляции. А динамические массивы так не создаются, их элементы надо размещать в куче. И если сами динамические массивы не являются экземплярами классов динамических массивов, инкапсулирующих работу с кучей, то явно. Остальные массивы статические, вне зависимости от того, располагаются ли их элементы на стеке, или в сегменте/секции данных.
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
     

  6. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,846
    Сказал(а) спасибо
    1,815
    Поблагодарили 945 раз(а) в 807 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от Сионист Посмотреть сообщение
    А ничего, что размер статического массива должен быть константой?
    Мне простительно, т.к. на с++ не программирую вообще(и не собираюсь туда лезть), делал исключительно
    чтобы помочь человеку, т.к. иных желающих не нашлось. Предоставлю вам возможность исправить программу.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
     

  7. #6  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    C++ Code:
    1. #include <iostream>
    2. #include <new>
    3. int main()
    4. {
    5. size_t N, M;
    6. int **A;
    7. int *B;
    8. size_t i, j, j1, j2;
    9. bool Flag;
    10. std::cot<<'N='; std::cin>>N; // Два оператора размещены на одной строке потому, что выполняемые ими действия связаны на уровне замысла: << выводит на экран подсказку для >>. Это не обязательно.
    11. std::cot<<'M='; std::cin>>M;
    12. A=new (std::nothrow) int*[N];
    13. if (A==nullptr)
    14. {
    15.   std<<cout<<"memory error"<<std::endl;
    16.   return 0;
    17. }
    18. for (i=0; i<N; ++i)
    19. {
    20.   A[i]=new (std::nothrow) int[M]; // Массив и указатель на языках c и c++ полностью взаимозаменяемы синтаксически, но фактически данные по указателю размещаются в куче, а sizeof для массива возвращает суммарный размер данных, а для указателя - размер самого указателя.
    21.   if (A[i]==nullptr)
    22.   {
    23.     std<<cout<<"memory error"<<std::endl;
    24.     for (--i; i<N; --i) // i<N здесь значит i>=0, size_t беззнаковый и при переходе через 0 происходит переполнение типа, а переменная принимает максимально представимое значение вместо -1, настоящие же отрицательные значения не поддерживаются типом.
    25.     {
    26.      delete [] A[i];
    27.     }
    28.     delete [] A;
    29.     return 0;
    30.   }
    31. }
    32. B=new (std::nothrow) int[N];
    33. if (B==nullptr)
    34. {
    35.   std<<cout<<"memory error"<<std::endl;
    36.   for (i=0; i<N; ++i)
    37.   {
    38.    delete [] A[i];
    39.   }
    40.   delete [] A;
    41. }
    42. for (i=0; i<N; ++i)
    43. {
    44.   for (j=0; j<M; ++j)
    45.   {
    46.    std::cout<<"A["<<i<<", "<<j<<"]="; std::cin>>A[i][j];
    47.   }
    48. }
    49. for (i=0; i<N; ++i)
    50. {
    51.   for (Flag=true, j1=0, j2=M-1; j1<j2; ++j1, --j2) //Считаем строку симметричной, пока не обнаружена её асимметрия, соответственно флаг симметричности ставим перед началом проверки на симметричность.
    52.   {
    53.    if (A[i][j1]!=A[i][j2]) //Если хотя бы одна пара симметрично расположенных элементов различается, то вся строка асимметрична.
    54.    {
    55.     Flag=false;
    56.     break; //Если уже обнаружена асимметрия строки, то дальше снова симметричной она не станет и проверку строки можно прекратить.
    57.    }
    58.    if (Flag)
    59.    {
    60.     B[i]=1;
    61.    }
    62.    else
    63.    {
    64.     B[i]=0;
    65.    }
    66.   }
    67. }
    68. for (i=0;i<N; ++i)
    69. {
    70.   std::cout<<"B["<<i<<"]="<<B[i]<<std::endl;
    71. }
    72. for (i=0;i<N; ++i)
    73. {
    74.   delete [] A[i];
    75. }
    76. delete [] A;
    77. delete [] B;
    78. return 0;
    79. }
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
     

  8. Пользователь сказал cпасибо:

    Free Admin (27.03.2017)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите решить
    от Алексей Романов в разделе Общие вопросы программирования
    Ответов: 0
    Последнее сообщение: 28.12.2015, 21:34
  2. Помогите решить в QB
    от _Anya_ в разделе QBasic
    Ответов: 10
    Последнее сообщение: 17.12.2014, 09:36
  3. Помогите решить
    от gekas в разделе Pascal
    Ответов: 1
    Последнее сообщение: 16.11.2014, 19:45
  4. Помогите решить
    от Origina1 в разделе Visual Basic
    Ответов: 1
    Последнее сообщение: 15.12.2013, 07:35
  5. Ответов: 0
    Последнее сообщение: 01.07.2012, 22:03
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •