C++: Массивы, сортировка и нахождение минимальных-максимальных индексов

Дан массив вещественных чисел X=(x1,x2,..,xn). Записать элементы
заданного массива Х в массив Y следующим образом: в начальной части
расположить положительные элементы в порядке возрастания, затем в
порядке убывания отрицательные элементы, нулевые элементы не
записывать. Оценить, как при этом изменилось положение максимального
и минимального элементов массива.
Использовать функции.

Задачка простая на вид. Приступаем. У нас есть массивы, целых два. с ними нужно уметь делать следующее:

  • Создавать (Random)
  • Выводить на экран
  • Сортировать
  • Дополнять элементами (для второго массива)

Continue reading

C++: Среднее арифметическое + нахождение минимального и максимального элементов (индексов) + сортировка

Хорошие задачки стали давать в универах. Составные =)

Вычислить среднее арифметическое элементов массива X=(x1,x2,…,xn),
расположенных между его минимальным и максимальным значениями.
Если минимальный элемент размещается в массиве раньше
максимального, то упорядочить массив на данном промежутке по
возрастанию его элементов, и наоборот, если минимальный элемент
размещается после максимального, то упорядочить по убыванию.

PS: Нельзя использовать динамическую память :(
Задача на самом деле не задача, а состоящая из трех подзадач:

  1. Найти минимальный и максимальный элементы и их индексы
  2. Вычислить среднее арифметическое для этого промежутка
  3. Отсортировать промежуток по возростанию или убыванию в зависимости от того, как расположены минимальный и максимальный элементы.

Continue reading

Java: Транспонированная матрица

Начал учить JAVA. Первая программа пусть будет транспонированная матрица. Мне код понятен, очень похоже на c/c++/c#.

Я модифицировал эту программу написанную на си

Транспонированная матрица — матрица, полученная из исходной матрицы  заменой строк на столбцы.

Continue reading

VBA: Рассчитать величину вклада в банке по месяцам

В банке открыт счет. Банк ежегодно начисляет фиксированный процент от вклада. Соответственно увеличивается сумма вклада. Составить программу, которая рассчитывает величину вклада и выводит эту величину для каждого года, пока величина вклада не увеличится вдвое. Для решения этой задачи предусмотреть клетки для ввода первоначальной величины вклада, учетной ставки процента от вклада, года помещения вклада в банк, а также для вывода года, когда сумма первоначального вклада удвоится.

Первое, что делаем, размечаем форму, определяем те ячейки, которые будут использоваться для ввода данных и определяем те, где будет выводиться информация. Для удобстава пользователя размещаем кнопку на листе.

Для входных данных будут использоваться ячейки 2,1; 2,2; 2,3.

Continue reading

C++, Транспонированная матрица

Не хватало транспонированной матрицы:

Upd: Транспонированная матрица на java

Способ без использования динамической памяти (n не больше ста):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <time.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int maxsize = 100;
    int a [maxsize][maxsize], n;
    int temp;
    cout << "n=";
    cin >> n;
 
    if (n > maxsize)
    {
        cout << "n is too lage...";
        system("pause");
        return -1;
    }
    srand(time(NULL));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    for(int i=0;i<n;i++) 
    { 
        for(int j=i;j<n;j++) 
        {
            temp=a[j][i];
            a[j][i]=a[i][j];
            a[i][j]=temp;
        }
    }
    cout << "Transp.:" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}
#include <iostream>
#include <time.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    const int maxsize = 100;
    int a [maxsize][maxsize], n;
    int temp;
    cout << "n=";
    cin >> n;

    if (n > maxsize)
    {
        cout << "n is too lage...";
        system("pause");
        return -1;
    }
    srand(time(NULL));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    for(int i=0;i<n;i++) 
    { 
        for(int j=i;j<n;j++) 
        {
            temp=a[j][i];
            a[j][i]=a[i][j];
            a[i][j]=temp;
        }
    }
    cout << "Transp.:" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}

Пример работы программы

С++, Получить индексы максимального и минимального элементов массива

Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем найдите позиции (номер строки и столбца) максимального и минимального элементов этой матрицы.

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

Continue reading

C++, След матрицы

Задача:

След матрицы – это сумма диагональных элементов этой матрицы. Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем вычислите след этой матрицы.

Для решения этой задачи пригодятся формулы диагоналей из задачи «Единичная матрица»

Я написал 2 варианта решения. Первый — в несколько циклов. В первом заполняем, во втором считаем. Во втором случае — один цикл, сразу заполняем и считаем.

Continue reading

Работа с матрицей в VBA

Внезапно появились лабораторные :)

Задачка такая:

Создать матрицу размера n x n, заполнить случайными числами от (-20 до 30). Сформировать одномерный массив от 1 до n, каждый элемент которого равен произведению положительных четных элементов данного столбца.

Решаем так (естественно все делаем в Excel):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Public Sub glav_diag()
Dim i As Integer ' Индекс строки
Dim j As Integer ' Индекс столбца
Dim q As Double ' Переменная результата для столбца
Dim cond As Integer ' Дополнительная переменная. Сколько раз выполнилось условие. Ее в принципе можно сделать булевой
 
n = InputBox("n=") ' Просим ввести n - размерность массива. У нас он всегда квадратный
 
ReDim arr(n, n) ' Объявляем его
q = 1 ' Так как у нас по условию "произведение", то мы вынуждены написать тут 1, иначе (в случае 0) произведение всегда будет равно 0
cond = 0 ' условие пока не выполнилось
' Generation of array
For i = 1 To n
For j = 1 To n
arr(i, j) = Int((-20 - 30 + 1) * Rnd + 30) ' Рандом от -20 до 30
Cells(i, j).Value = arr(i, j) ' Забить это в ячейку
Cells(i, j).Interior.ColorIndex = xlNone ' Убрать цвет если он был
Next j
Next i
 
' Обработка и вычисления
For j = 1 To n
For i = 1 To n
If ((arr(i, j) > 0) And (arr(i, j) Mod 2 = 0)) Then ' Если значение массива больше 0 и четное
q = q * arr(i, j) ' тогда домножаем его на q и записываем новый результат в q
cond = cond + 1 ' Если условие выполнилось увеличиваем переменную
Cells(i, j).Interior.Color = vbCyan ' Закрашиваем соответствующую ячейку на листе цветом
End If
Next i
If (cond > 0) Then ' Если условие выше выполнилось хотя бы раз...
Cells(n + 1, j).Value = q ' тогда записываем значение вычислений в ячейку ниже нашей матрицы
Cells(n + 1, j).Interior.Color = vbGreen ' и красим в заленый
Else
Cells(n + 1, j).Value = 0 ' Если не выполнилось пишем туда 0 (таких элементов нет) просто q записать нельзя, так как он равен 1
Cells(n + 1, j).Interior.Color = vbGreen ' и тоже в зеленый
End If
cond = 0
q = 1
Next j
End Sub
Public Sub glav_diag()
Dim i As Integer ' Индекс строки
Dim j As Integer ' Индекс столбца
Dim q As Double ' Переменная результата для столбца
Dim cond As Integer ' Дополнительная переменная. Сколько раз выполнилось условие. Ее в принципе можно сделать булевой

n = InputBox("n=") ' Просим ввести n - размерность массива. У нас он всегда квадратный

ReDim arr(n, n) ' Объявляем его
q = 1 ' Так как у нас по условию "произведение", то мы вынуждены написать тут 1, иначе (в случае 0) произведение всегда будет равно 0
cond = 0 ' условие пока не выполнилось
' Generation of array
For i = 1 To n
For j = 1 To n
arr(i, j) = Int((-20 - 30 + 1) * Rnd + 30) ' Рандом от -20 до 30
Cells(i, j).Value = arr(i, j) ' Забить это в ячейку
Cells(i, j).Interior.ColorIndex = xlNone ' Убрать цвет если он был
Next j
Next i

' Обработка и вычисления
For j = 1 To n
For i = 1 To n
If ((arr(i, j) > 0) And (arr(i, j) Mod 2 = 0)) Then ' Если значение массива больше 0 и четное
q = q * arr(i, j) ' тогда домножаем его на q и записываем новый результат в q
cond = cond + 1 ' Если условие выполнилось увеличиваем переменную
Cells(i, j).Interior.Color = vbCyan ' Закрашиваем соответствующую ячейку на листе цветом
End If
Next i
If (cond > 0) Then ' Если условие выше выполнилось хотя бы раз...
Cells(n + 1, j).Value = q ' тогда записываем значение вычислений в ячейку ниже нашей матрицы
Cells(n + 1, j).Interior.Color = vbGreen ' и красим в заленый
Else
Cells(n + 1, j).Value = 0 ' Если не выполнилось пишем туда 0 (таких элементов нет) просто q записать нельзя, так как он равен 1
Cells(n + 1, j).Interior.Color = vbGreen ' и тоже в зеленый
End If
cond = 0
q = 1
Next j
End Sub

Вот такой простой код. Все комментарии в коде.

Скачать тестовым документом

Результат работы:

Continue reading

C++: Антисимметричная матрица

Задача:

Напишите программу которая создает антисимметричную матрицу размера N, заполненную случайными числами. Антисимметричная матрица: Aij=-Aji

Алгоритм примерно такой: Спрашиваем у пользователя, какого размера матрицу он бы хотел видеть. Стандартно всё заполняем случайными числами. После этих операций инициируем еще циклы, в которых изменяем значения

Continue reading