Многомерные массивы. Базовые алгоритмы программирования С++ и 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; }