Матрица 4х2

нини

New member
14.06.2013
1
0
#1
помогите пож-та разобраться.
поставлена задача: Задана вещественная матрицаN[4][2]. Переставить вторую и третью строку и найти максимальный элемент в каждой строке из этих строк.
необходимы два варианта решения, первый с помощью указателей. вот есть такой вариант решения, если можно покритикуйте, если что не так B) буду благодарна :blink:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
int i, j;
float m[4][2];
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
printf("string - %d, column - %d \n", i+1, j+1);
scanf("%f",&m[j]);
}
}
int s=2; //номер строки
float tmp[2]={m[s-1][0],m[s-1][1]}; //сохраняем 2-ю строку;
s-1 - т.к. считается с 0
m[s-1][0]=m[0];m[s-1][1]=m[1]; //во 2-ю строку записываем 3-ю строку
m[0]=tmp[0];m[1]=tmp[1]; //в 3-ю строку записываем сохраненную 2-ю
float max;
for (i = 0; i < 4; i++)
{
max = m[0]; // инициализируем переменную max первым
числом из строки массива
for (j = 0; j < 2; j++)
{
if(max < m[j])
{
max = m[j];
}
}
// вывод максимально числа
printf("\n в строке %d max = %10.2f \n", i+1, max);
}
getch(); //ожидаем нажатия клавиши
}

а далее необходимо решить эту же задачу с использованием двух функций. В главной функции(main()) с помощью датчика случайных чисел задать два массива, соответствующие варианту, передать каждый из массивов во вторую функцию(для каждого массива свой вызов функции). Алгоритм второй функции соответствует вычислениям, проводимым с массивами. Результаты передаются в главную функцию, где он и выводятся на экран монитора.
подскажите, как и с чего начинать?
 
R

rrrFer

#2
начни с заполнения массивов случайными числами
гугл -> CPP rand (одной из ссылок будет cplusplus.com и там есть пример)
 

Monarh

Active member
14.02.2009
34
0
#4
Максимум можно находить, поскольку в каждой строке всего по 2 элемента, сразу сравнивая элементы строки:
C++:
float max;
for (i = 0; i < 4; i++) {
max = m[i][0] > m[i][1] ? m[i][0] : m[i][1]; // читается так: если m[i][0] > m[i][1], то max = m[i][0], иначе max = m[i][1]
...
}
А с указателями, если Я правильно понял суть задачи, это выделение через new и тогда перестановка строк это просто поменять указатели на 2 и 3 строки местами:
C++:
float* mp[4];
for (i = 0; i < 4; i++)
mp[i] = new float[2];
перестановка 2 и 3 строки
C++:
float* mp_tmp = mp[1];
mp[1] = mp[2];
mp[2] = mp_tmp;
или если можно использовать С++, а не чистый Си, то можно сделать так:
C++:
// Подключаем библиотеку 
#include <algorithm>
// а в коде main'а
std::swap( mp[1], mp[2]); // это для указателей
// И для статической матрицы тоже можно использовать swap
std::swap( mp[1][0], mp[2][0]); // переставляем первые элементы 2 и 3 строк
std::swap( mp[1][1], mp[2][1]); // переставляем вторые элементы 2 и 3 строк