Форум программистов, компьютерный форум CyberForum.ru

Оформить в виде функции - C++

Восстановить пароль Регистрация
 
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
20.05.2013, 11:19     Оформить в виде функции #1
Оформить в виде функции на C/C++ решение задачи:
http://www.cyberforum.ru/cgi-bin/latex.cgi?b_i = a_i \,- \,(\min_{1\leq j\leq n}a_j) \\i = 1, 2 .. n

Кликните здесь для просмотра всего текста
C++
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
#include <ctime> 
#include <iostream> 
#include <conio.h>
const int N=10;
const int M=10;
int i,j;
using namespace std; 
void func(int **a, int b[N],int c[N][M], int m, int n)
{cout<<endl;
    for (i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            c[i][j]=a[i][j]-b[j];
            cout<<c[i][j]<<" ";
            
        }cout<<endl;
    }
}
int main()
{ 
    srand(time(0)); 
    int n, m,b[N],c[N][M]; 
    cout << "n m? "<<endl; 
    cin >> n >> m; 
    int **a = new int *[n]; 
    cout << "massiv:\n"; 
    for (int i = 0; i < n; ++i) { 
        a[i] = new int[m]; 
        for (int j = 0; j < m; ++j) 
        cout << (a[i][j]=rand() % 100)<<'\t'; 
        cout << endl; 
    } 
    cout << "mins:\n"; 
    for (int i = 0; i < m; ++i) { 
        int m = a[0][i]; 
        for (int j = 1; j < n; ++j) 
            if (a[j][i] < m) 
                m = a[j][i];
        b[i]=m;
        cout << b[i]<<" "; 
    } 
    cout << endl; 
    func(a,b,c,n,m);
   _getch();
}

я кажется не до понял задание. На выходе у меня получился двумерный массив.
Я делал так. Задавал матрицу, в каждом столбце находил минимальный элемент. Присвоил их вектору.
Потом от каждой строки отнимал этот вектор. Но при таких действиях же двумерный массив получается. Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 11:26     Оформить в виде функции #2
А причем тут вообще двумерный массив? Нужно каждый элемент исходного вектора уменьшить на минимальный элемент. Делов-то.
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
20.05.2013, 11:56  [ТС]     Оформить в виде функции #3
Ilot, а как понять тогда a(i)-min a(j)? я думал раз есть a(i) и a(j) то это матрица. Разве можно задавать разным векторам одинаковые имена?

Добавлено через 23 минуты
C++
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
#include <iostream>
#include <conio.h>
#include <ctime>
using namespace std;
const int N=10;
int m;
 
void input(int a[N], int n)
{
    for (int i=0;i<n;i++)
    {
    cin>>a[i];
    }
}
void output(int a[N],int n)
{
    cout<<"Vector:";
    for (int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
void func(int a[N], int b[N], int n, int m)
{
    cout<<endl;
    for (int i=0;i<n;i++)
        {
            b[i]=(a[i]-m);
    cout<<b[i]<<" ";
    }
}
    
        
int main()
{
    setlocale(LC_ALL,"");
    int a[N],b[N],n,i,j,k,v,m,d;
    cout<<"Введите количество элементов:";
    cin>>n;
    input(a,n);
    output(a,n);
    m=a[0];
    for (int i=0;i<n;i++)
        if (a[i]<m) m=a[i];
    d=m;
    cout<<"min="<<d<<endl;
    func(a,b,n,m);
_getch();
}
вот как ты говорил
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 12:13     Оформить в виде функции #4
Цитата Сообщение от emiln00b Посмотреть сообщение
Ilot, а как понять тогда a(i)-min a(j)? я думал раз есть a(i) и a(j) то это матрица. Разве можно задавать разным векторам одинаковые имена?
Второе слагаемое это скаляр!
emiln00b
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 32
20.05.2013, 12:19  [ТС]     Оформить в виде функции #5
у меня код правильный?
ввожу вектор, нахожу его наименьшее потом из каждого элемента введенного вектора отнимаю этот минимум.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
20.05.2013, 12:25     Оформить в виде функции #6
emiln00b, у вас есть заполненный вектор, находите в нем минимальный элемент и заполняете второй вектор элементами первого минус минимальный.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 12:25     Оформить в виде функции #7
Разбирайся:
C++
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
#include <iostream>
#include <conio.h>
void func(int arr[], int n);
int main() {
    int *array, n;
    std::cout << "Enter n: ";
    std::cin >> n;
    array = new int [n];
    std::cout << "Enter array a: " << std::endl;
    for (int i = 0; i < n; i++)
        std::cin >> array[i];
    func(array, n);
    delete []array;
    getch();
    return 0;
}
void func(int arr[], int n) {
    int min = arr[0];
    for (int i = 0; i < n; i++)
        if (min > arr[i])
            min = arr[i];
        std::cout << "Array b: " << std::endl;
    for (i = 0; i < n; i++)
        std::cout << arr[i] - min << std:: endl;
}
P.S. Старайся определения ф-й помещать после main.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 12:42     Оформить в виде функции
Еще ссылки по теме:

C++ Оформить функции в виде методов класса
Оформить в виде функции C++
Оформить обработку в виде функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
20.05.2013, 12:42     Оформить в виде функции #8
emiln00b, вот вариант STL

C++
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <time.h>
 
void func(std::vector<int> &_coll){
    //минимальный элемент
    int min(*std::min_element(_coll.begin(), _coll.end()));
 
    std::vector<int> coll1(_coll);              //копируем вектор А в В
 
    //каждый элемент вектора Вi = Ai - min
    std::for_each(coll1.begin(), coll1.end(), [min](int &op) { op -= min; });
 
    //выводим содержимое вектора А
    std::cout << "\nVector B: ";
    std::copy(coll1.begin(), coll1.end(), std::ostream_iterator<int>(std::cout, " "));
}
 
int main()
{
    int size(10);                           //размер вектора
    srand(time(nullptr));
 
    std::vector<int> coll(size);            //вектор А
 
    //рандомно заполнили вектор
    std::for_each(coll.begin(), coll.end(), [](int &op) { op = rand() % 21; });
 
    //выводим содержимое вектора А
    std::cout << "Vector A: ";
    std::copy(coll.begin(), coll.end(), std::ostream_iterator<int>(std::cout, " "));
 
    func(coll);
 
    std::cout << std::endl << std::endl;
    return 0;
}
Yandex
Объявления
20.05.2013, 12:42     Оформить в виде функции
Ответ Создать тему
Опции темы

Текущее время: 03:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru