Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
nell0real
0 / 0 / 1
Регистрация: 31.10.2011
Сообщений: 17
1

Получить количество отрицательных членов массива и произведение элементов, принадлежащих отрезку [B,C]

28.11.2011, 13:40. Просмотров 1166. Ответов 12
Метки нет (Все метки)

Имеется программа
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{       
        
        printf("Vvedite n : ");
        int n;scanf("%d",&n);
        int i, m = 0, * arr = (int *)malloc(n*sizeof(int));
        printf("Vvedite B :");
        int b;
        scanf("%d",&b);
        printf("Vvedite C :");
        int c;
        scanf("%d",&c);
        long mult = 1;
        int nCount = 0;
        for(i = 0; i < n; i++)
        {
                printf("arr[%d] = ",i + 1);
                scanf("%d",&arr[i]);
                if(arr[i] < 0)
                        m++;
                if(b <= arr[i] && arr[i] <= c)
                {
                        nCount++;
                        mult *= arr[i];
                }
        }
        if(m == 0)
                printf("Massiv ne soderzhit otricatel'nih elementov\n");
        else
                printf("Massiv soderzhit %d otricatel'nie elementi\n",m);
        if(nCount == 0)
                printf("Massiv ne soderzhit chislo v intervale[B;C]\n");
        else
                printf("Elementi proizvedeniya v intervale [B;C] is : %u\n",mult);
 
        system("pause");
        return 0;
}
По работе программы вопросов нет, но есть вопрос по коду.
Строка
C
1
 int i, m = 0, * arr = (int *)malloc(n*sizeof(int));
это динамический массив как я понял. Можно ли как то извернуться и вместо него сделать псевдодинамический? В универе только начали проходить одномерные псевдодинамические массивы и к динамическим массивам не подходили.

Или если есть возможность переписать код на уровне "чайника", то вот условие задачи
Дан массив из N вещественных чисел. Получить количество отрицательных членов массива и произведение элементов, принадлежащих отрезку [B,C]

Надеюсь на вашу помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 13:40
Ответы с готовыми решениями:

Даны две последовательности. Найти произведение элементов, принадлежащих отрезку от K до H
Прошу помогите. Даны две последовательности. Найти произведение элементов, принадлежащих отрезку от...

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

Найти произведение, сумму и количество отрицательных элементов массива
Привет)) Заполнить матрицу m*n с клавиатуры. Найти произведение,сумму и количество отрицательных...

Как найти произведение и количество отрицательных элементов массива В(12), имеющих четный индекс?
Как найти произведение и количество отрицательных элементов массива В(12), имеющих четный индекс?

Задать двумерный массив размерности N*N из целочисленных элементов, принадлежащих отрезку [-10;10].
Задать двумерный массив размерности N*N из целочисленных элементов, принадлежащих отрезку . Вывести...

12
Bers
Заблокирован
28.11.2011, 14:35 2
Что такое "псевдодинамический массив" ?
0
nell0real
0 / 0 / 1
Регистрация: 31.10.2011
Сообщений: 17
28.11.2011, 14:43  [ТС] 3
если честно, сам не знаю. препод сказал что нужно сделать псевдодинамический массив. а что это и вообще существует ли он (в чем я уже сомневаюсь) я не знаю. либо я дилетант либо препод...
0
co6ak
Кошковед
516 / 504 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
28.11.2011, 14:52 4
я так понимаю, что "псевдодинамический", это, допустим массив [100]. а уже обращаешься к нему не в полный размер, а лишь до нужных N эл-тов
0
Infinity3000
1060 / 579 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
28.11.2011, 14:53 5
При описании массива в программе надо обязательно указывать количество эле-ментов массива для того, чтобы компилятор выделил под этот массив нужное количество памяти. Это не всегда бывает удобно, т. к. число элементов в массиве может меняться в зависимости от решаемой задачи. Динамические массивы реализуются с помощью указа-телей (см. далее).
Псевдодинамические массивы реализуются следующим образом:
1) при определении массива выделяется достаточно большое количество памяти:
const int MAX_SIZE=100;//именованная константа
int mas[MAX_SIZE];
2) пользователь вводит реальное количество элементов массива меньшее N.
int n;
cout<<”nEnter the size of array<”<<MAX_SIZE<>n;
3) дальнейшая работа с массивом ограничивается заданной пользователем размерно-стью n.

0 1 2 3 n MAX_SIZE
Т. о. используется только часть массива
1
Bers
Заблокирован
28.11.2011, 14:59 6
Цитата Сообщение от nell0real Посмотреть сообщение
если честно, сам не знаю. препод сказал что нужно сделать псевдодинамический массив. а что это и вообще существует ли он (в чем я уже сомневаюсь) я не знаю. либо я дилетант либо препод...
Единственное, что приходит в голову: нужен класс-обертка, над стековым массивом.
Внешне, обёртка должна себя вести подобно вектору. Единственное ограничение - количество элементов такого "фиктивного" вектора должно быть строго ограниченно константой.

Добавлено через 2 минуты
хотяяя.... сишный код.

Гм... глупость какая то. С точки зрения си, "псевдоденамический массив" это обычный массив в статик, либо глобал памяти...
2
nell0real
0 / 0 / 1
Регистрация: 31.10.2011
Сообщений: 17
28.11.2011, 15:04  [ТС] 7
Цитата Сообщение от Bers Посмотреть сообщение
Единственное, что приходит в голову: нужен класс-обертка, над стековым массивом.
Внешне, обёртка должна себя вести подобно вектору. Единственное ограничение - количество элементов такого "фиктивного" вектора должно быть строго ограниченно константой.

Добавлено через 2 минуты
хотяяя.... сишный код.

Гм... глупость какая то. С точки зрения си, "псевдоденамический массив" это обычный массив в статик, либо глобал памяти...
скорее всего препод имел ввиду "обычный массив в статик". все же хотелось бы узнать как заменить int i, m = 0, * arr = (int *)malloc(n*sizeof(int)); на обычный массив
0
Bers
Заблокирован
28.11.2011, 15:13 8
nell0real, а нельзя было что ли попроще выразиться?
Например обычный статический массив назвать обычным статическим массивом?

Он же... педагог всё таки...

Добавлено через 2 минуты
C++
1
int i, m = 0, * arr = (int *)malloc(n*sizeof(int));
на обычный массив


C++
1
2
const int N=256;
int Arr[n];
0
nell0real
0 / 0 / 1
Регистрация: 31.10.2011
Сообщений: 17
28.11.2011, 15:13  [ТС] 9
Bers, ну это уже его тараканы в голове решили обозвать элементарное невообразимо непонятным.
0
Bers
Заблокирован
28.11.2011, 15:15 10
вапще, массивы бывают динамическими, стековыми, и статическими.
Что бы узнать в чем между ними разница, напишите волшебное слово "кастую Сыроежку"
0
nell0real
0 / 0 / 1
Регистрация: 31.10.2011
Сообщений: 17
28.11.2011, 15:22  [ТС] 11
Цитата Сообщение от Bers Посмотреть сообщение
вапще, массивы бывают динамическими, стековыми, и статическими.
Что бы узнать в чем между ними разница, напишите волшебное слово "кастую Сыроежку"
Тонкий юмор у Вас, сударь еще вопрос: почему мы присвоили константе именно 256?
0
Bers
Заблокирован
28.11.2011, 15:29 12
Цитата Сообщение от nell0real Посмотреть сообщение
ы присвоили константе именно 256?
Ну можете сделать любое другое значение. Главное, что бы ваш "псевдодинамический" массив смог принять в себя сколько данных, сколько нужно для работы программы.Что бы запаса памяти хватило.

Единственное, что здесь ещё нужно знать (я сам в этом толком уже не разбираюсь) - это, что все структуры данных выравниваются по границе кратной 4м ( sizeof(int) )

То есть, массив из 255 элементов все равно будит выровнен по границе до 256. Но тогда память под 1 элемент будит как бы "утеряна".

Что бы ничего не терять, лучше сразу создавать структуру данных, размер которой кратен 4м.

Выравнивание структуры данных по границе связано с особенностями архитектуры процессора.

Можно делать упакованные структуры, но работа с такими структурами будит чуточку медленее.
0
nell0real
0 / 0 / 1
Регистрация: 31.10.2011
Сообщений: 17
28.11.2011, 15:31  [ТС] 13
Цитата Сообщение от Bers Посмотреть сообщение
Ну можете сделать любое другое значение. Главное, что бы ваш "псевдодинамический" массив смог принять в себя сколько данных, сколько нужно для работы программы.Что бы запаса памяти хватило.

Единственное, что здесь ещё нужно знать (я сам в этом толком уже не разбираюсь) - это что, все структуры данных выравниваются по границе, кратной 4м ( sizeof(int) )

То есть, массив из 255 элементов все равно будит выровнен по границе до 256. Но тогда память под 1 элемент будит как бы "утеряна".

Что бы ничего не терять, лучше сразу создавать структуру данных, размер которой кратен 4м.

Выравнивание структуры данных по границе связана с особенностями архитектуры процессора.

Можно делать упакованные структуры, но работа с такими структурами будит чуточку медленее.
Понял. Огромное спасибо за разъяснения
0
28.11.2011, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 15:31

Массив: Получить количество отрицательных членов массива а1, ... , an и произведение элементов, принадлежащих отрезку [a,b].
Помогите!!! Составить программу, просто в паскале полный 0 :( Дан массив действительных чисел а1,...

Получить количество отрицательных элементов массива и произведение элементов, принадлежащих отрезку [с,б]
Паскаль АВС. дан массив действительных чисел а1........Ан. Получить количество отрицательных...

Получить количество отрицательных элементов массива и произведение элементов, принадлежащих отрезку
Дан массив действительных чисел а1,…, аn. Получить количество отрицательных элементов массива и...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru