Многомерные массивы. Базовые алгоритмы программирования С++ и CПравить

1.(Транспонирование матрицы.)

Транспонировать заданную квадратную матрицу размерности N.

Алгоритм на языке С++


#include "stdafx.h"
#include <iostream>

using namespace std ;

int _tmain(int argc, _TCHAR* argv[])

{const int n = 3 ;

int a [ n ] [ n ] = { 1, 5, 14, 2, -11, 2, 7, -3, -8 } ;

cout << "Initializacia matrici\n" ;

for ( int i = 0; i < n; i++ ) { for ( int j = 0; j < n; j++ ) cout << a[i][j] << '\t' ; cout << endl ; }

//транспонирование матрицы

int t ;

for ( int i = 1; i < n; i++ )

for ( int j = 0; j < n - 1; j++ ) { t = a[i][j] ; a[i][j] = a[j][i] ; a[j][i] = t ; }

//вывод транспонированной матрицы обычным способом

cout << "\nTransponirovannay matrica\n" ;

for ( int i = 0; i < n; i++ ) { for ( int j = 0; j < n; j++ )

cout << a [ i ] [ j ] << '\t' ;

cout << endl ; }

return 0;

2. Создать матрицу размерности n, состоящую из чисел 1,2,3,4... заполненную по "спирали"

 #include "stdafx.h"
 #include <iostream>
 #include <stdio.h>
 #include <conio.h>
  using namespace std;
  #define n 10
 int _tmain(int argc, _TCHAR* argv[])

{int i = 1, f, j, k, n1 = n/2; int a[n][n];

// Обнуление матрицы и инициализация указателя for (f = 0; f < n; ++f) for (j = 0; j < n; ++j)

a[f][j] = 0; 

for (k = 1; k <= n1; k++) // Число спиралей { // Верхний горизонтальный столбец for (j = (k-1); j < (n-k+1); j++) a[k-1][j]=i++;

// Правый верхний столбец for (j = k; j < (n-k+1); j++) a[j][n-k]=i++;


// Нижний горизонтальный столбец for (j = (n-k-1); j >= (k-1); --j) a[n-k][j]=i++;

// Левый верхний столбец for (j = (n-k-1); j >= k; j--) a[j][k-1]=i++; } if ( n % 2 ) a[n1][n1]=n*n; cout<<"vivod matricy \n";

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

cout<< a[i][j]<<"\t";

       cout << "\n";}
  cout<<"\n Press any key: \n";
   _getch();

return 0; }

3. Создать многоступенчатый массив. Подсчитать сумму элементов в каждой ячейке и вывести на экран. Отсортировать сумму по возрастанию. Вывести строки массива в соответствии отсортированным суммам. (Алгоритм на C#)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication21

{

   class Program
   {
       static void Main(string[] args)
       {
           const int k = 5;
           int[][] a = new int[k][] { new int[5], new int[3], new int[8], new int[4], new int[6] };
           int[] Summ = new int[k];
           for (int i = 0; i < k; i++)
           { Summ[i] = 0; }


           Random Rnd = new Random();
           for (int i = 0; i < a.Length; i++)
           {
               for (int j = 0; j < a[i].Length; j++)
               {
                   a[i][j] = 0;
                   a[i][j] = Rnd.Next(-100, 100);
               }
           }
           for (int i = 0; i < a.Length; i++)
           {
               for (int j = 0; j < a[i].Length; j++)
                   Console.Write(a[i][j] + " ");
               Console.WriteLine();
           }
        // находим сумму элементов в каждой строке
           for (int i = 0; i < a.Length; i++)
               for (int j = 0; j < a[i].Length; j++)


                   Summ[i] = Summ[i] + a[i][j];
           // выводим полученный массив сумм
           Console.WriteLine("Сумма элементов по строкам: ");
           for (int i = 0; i < k; i++)
               Console.Write(Summ[i] + " ");
           int nmin, min;
           int[] n = new int[k];
           
           // массив n равен массиву Summ чтобы запомнить где первоначально располагались числа суммы
           for (int i = 0; i < k; i++)
               n[i] = Summ[i];
          
                  
           for (int i = 0; i < k - 1; i++)
           {
               nmin = i; min = Summ[i];
               for (int j = i + 1; j < k; j++)
                   if (Summ[j] < min)
                   {
                       min = Summ[j]; nmin = j;
                   }
               Summ[nmin] = Summ[i]; Summ[i] = min;
           }


           Console.WriteLine();
           Console.WriteLine("Сумма элементов по возрастанию: ");
           for (int i = 0; i < k; i++)
               Console.Write(Summ[i] + " ");
           Console.WriteLine();
          
           // массив mesto запоминает номер ячейки, где первый раз располагалось отсортированное число массива summ
           int[] mesto = new int[k];
          
           for (int i = 0; i < k; i++)
               for (int j = 0; j < k; j++)
                   if (Summ[i] == n[j]) { mesto[i] = j;  break; }


           Console.WriteLine();
           Console.WriteLine("вывод массива по возрастаниюсумм в строках");
           for (int i = 0; i < a.Length; i++)
           {
               for (int j = 0; j < a[mesto[i]].Length; j++)
                   Console.Write(a[mesto[i]][j] + " ");
               Console.WriteLine();
           }
           Console.ReadLine();
           
       }
   }

} 4. В шифре Цезаря алфавит размещается на круге по часовой стрелке. За последней буквой алфавита идет первая буква алфавита, т.е. после буквы "я" идет буква "а". При шифровании текста буквы заменяются другими буквами, отстоящими по кругу на заданное количество позиций (сдвиг) дальше по часовой стрелке. Например, если сдвиг равен 3, то буква "а" заменяется на букву "г", буква "б" на букву "д", а буква "я" на букву "в".

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace ConsoleApplication22 {

   class Program
   {
       static void Main(string[] args)
       {
           StringBuilder alf = new StringBuilder("абвгдеёжзийклмнопрстуфхцчшщъыьэюя");
           Console.WriteLine("Введите строку, которая будет преобразована по шифру цезаря");
                       
           // должно быть тип StringBuilder так как s меняется, поэтому и alf тоже StringBuilder,
           //чтобы можно было сравнивать одинаковые типы
           
           StringBuilder s = new StringBuilder(Console.ReadLine());
           Console.WriteLine("Введите количество сдвигов");
           int sd;
           sd = int.Parse(Console.ReadLine());
           int l = s.Length;//длина строки s
           int l1 = alf.Length;
               for (int j = 0; j < l; j++)
               for (int i = 0; i < l1; i++)
               {
                   if (s[j] == alf[i])
                   {
                       Console.WriteLine(s[j] + " " + alf[i]);
                       if (i + sd > l1)
                           

// Replace заменяет символ s[j] на alf[i + sd - l1]

                           s.Replace(s[j], alf[i + sd - l1]);
                       else { s.Replace(s[j], alf[i + sd]);break; }
                   }
               }
                               
           Console.WriteLine(s);
           Console.ReadLine();
    }
}

} 5. Дано вещественное число Х. Получить вещественную квадратную матрицу А из 10 строк и 10 столбцов, формируя элементы матрицы по приведенной схеме

1 х ... х8 х9
х 0 ... 0 х8
.  0    0 .
.  0    0 .
.  0    0 .
х8 0 ... 0 х
х9 0 ... 0 1
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])

{const int n=10; int a[n][n]={0},i,j,x;

cout<< "vvedite x= ";cin>>x;

a[0][0]=1;

a[n-1][n-1]=1;

for (int i = 1; i < n; i++)

{a[i][0]=a[i-1][0]*x;

a[0][i]=a[i][0];

a[n-i][n-1]=a[i-1][0];

a[n-1][n-i]=a[i-1][0];}

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

for (j = 0; j < n; ++j)

cout<< a[i][j]<<"\t";cout << "\n";}

  cout<<"\n Press any key: \n";
   _getch();

return 0; }

Alfia (обсуждение) 18:35, 8 ноября 2012 (UTC)
Alfia (обсуждение) 18:56, 8 ноября 2012 (UTC)