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

способ по организации программы - C++

Восстановить пароль Регистрация
 
kondusov
2 / 2 / 0
Регистрация: 01.06.2013
Сообщений: 152
27.09.2013, 16:39     способ по организации программы #1
Ребята. Сегодня сдавал задачи и преподаватель сказал, что нужно использовать ДИНАМИЧЕСКИЙ массив. Ниже код программы(откомпилированный, работает прекрасно). Что нужно для того что изменить код под динамич массив? Много переделывать?
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
/*
стр 83 зад 30
Дана вещ. квадратная матрица размерности N. Посчитать x1*xN + x2*xN-1 + ... +
xN*x1, где xk - наибольшее значение элементов k-ой строки матрицы
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 3
 
int main(void)
{
    float a[N][N];
    float max[N], sum;
    int i, j;
    
    
    srand(time(NULL));
    
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            /* scanf("%f", &a[i][j]); */
            /* a[i][j] = (rand() - RAND_MAX/2) / 100.; */
            a[i][j] = (rand() - RAND_MAX/2) % 100;
            printf("%7.2f ", a[i][j]);
        }
        printf("\n");
    }
    
    for (i = 0; i < N; i++) {
        max[i] = a[i][0];
        for (j = 1; j < N; j++) {
            if (a[i][j] > max[i]) {
                max[i] = a[i][j];
            }
        }
    }
    
    for (i = 0, sum = 0; i < N; i++) {
        sum += max[i]*max[N-1-i];
    }
    
    printf("Res = %.2f\n", sum);    
    
    return 0;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2013, 16:39     способ по организации программы
Посмотрите здесь:

C++ ошибка при организации меню
Ошибка в организации класса C++
Операторы организации циклов C++
организации функции C++
C++ Класс для организации обработки целочисленного массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
27.09.2013, 17:00     способ по организации программы #2
При изучении какой темы Вы получили это задание? (просто можно сделать несколькими способами)
kondusov
2 / 2 / 0
Регистрация: 01.06.2013
Сообщений: 152
27.09.2013, 17:08  [ТС]     способ по организации программы #3
Цитата Сообщение от reisal78 Посмотреть сообщение
При изучении какой темы Вы получили это задание? (просто можно сделать несколькими способами)
да вот не помню, указатели может быть . хоть каким=нибудь но другим способом
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
28.09.2013, 09:08     способ по организации программы #4
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
49
50
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
    //создание "бесконечного" массива
    int size_arr(1);   // ок, тк размер динамического массива надо задавать хоть я его и не знаю, ну задам ему единицу.
    long *values(nullptr); //задам указатель
    values = new long [size_arr]; // выделю память под массив
    
    long *tmpValues(nullptr); // делаю временный указатель
 
    long inputValue(0);  
    
 
    while (true)
    {
        cout << "Enter value, 0 - exit: ";
        cin >> inputValue;  //запрашиваю у пользователя зхначение
        
        if (inputValue==0)  //если пользователь  ввел 0 - выхожу из цикла
            break;
 
        values[size_arr-1] = inputValue; // записываю введеное значение в массив
       
 
        {
                size_arr++; // увеличиваю размер массива на 1
                tmpValues = new long[size_arr]; //выделяю память под временный массив с увеличенным размером на 1
 
                for (int i = 0; i < size_arr-1; i++)  //Перекидываю значения из основного массива во временный
                    tmpValues[i] = values [i];
                    
                delete[] values; //Очищаю память выделеную под основной массив
                
                values = tmpValues; //Эм... "подменяю" адреса, так похоже правильно будет сказать
 
                tmpValues = nullptr; // "сбрасываю" значения временного указателя 
        }
 
        
 
    }
    
                  
return 0;
}
Вот так можно сделать динамический массив с использованием указателей.
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2013, 11:22     способ по организации программы #5
kondusov, ниже минимальный объём изменений которые следует внести в твой проект чтобы было использование динамических массивов
Цитата Сообщение от kondusov Посмотреть сообщение

#include <iostream>
#include <cstdlib>
using namespace std;
//#define N 3

int main()
{
* * float **a;
* * float *max, sum;
* * int i, j, N;
cout<<"Enter size of array : ";cin>>N;

max = new flaot[N];
a = new float * [N];
for(i = 0; i < N; i++)
a[i] = new float[N];

Если же речь идёт о коде в стиле Си то для выделения памяти следует использовать malloc
Вот код в Си
http://codepad.org/IQAY7Y0K
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
49
50
/*
стр 83 зад 30
Дана вещ. квадратная матрица размерности N. Посчитать x1*xN + x2*xN-1 + ... +
xN*x1, где xk - наибольшее значение элементов k-ой строки матрицы
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    float **a;
    float *max, sum;
    int i, j, N;
    
    
    srand(time(NULL));
    N = 3 + rand() % 3;//тут понятное дело нужен ввод но мы обойдёмся рандомом
    a = (float **)malloc(N*sizeof(float *));
    max = (float *)malloc(N*sizeof(float));
    
    for (i = 0; i < N; i++) 
    {
        a[i] = (float *)malloc(N*sizeof(float));
        for (j = 0; j < N; j++) 
        {
            a[i][j] = (rand() % 1000) / 10.0;
            printf("%3.1f ", a[i][j]);
        }
        printf("\n");
    }
    
    for (i = 0; i < N; i++) {
        max[i] = a[i][0];
        for (j = 1; j < N; j++) {
            if (a[i][j] > max[i]) {
                max[i] = a[i][j];
            }
        }
    }
    
    for (i = 0, sum = 0; i < N; i++) {
        sum += max[i]*max[N-1-i];
    }
    
    printf("Res = %.2f\n", sum);    
    getchar();
    return 0;
}
Output:
34.2 73.5 9.8
33.3 16.7 96.0
19.3 20.0 67.1
Res = 19079.70
Yandex
Объявления
28.09.2013, 11:22     способ по организации программы
Ответ Создать тему
Опции темы

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