Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 20.05.2008
Сообщений: 20
1

Вопрос по программе на тему: Массивы и указатели. Динамическое выделение памяти

10.10.2009, 22:59. Показов 2673. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
народ, очень прошу! пожалуйста!
Помогите решить задачку на тему: Массивы и указатели. Динамическое выделение памяти
Вот задача.
Объявить массив целых чисел и заполнить его случайными значениями. Размер массива и диапазон значений его элементов заданы ниже.

№ подзадачи - 1
Размерность массива -200
Диапазон значений -50 - 50
Что нужно сделать - Определить среднюю длину непрерывных участков положительных чисел

№ подзадачи - 2
Размерность массива 100
Диапазон значений -100 - 100
Что нужно сделать - Ограничить значения всех элементов, абсолютные значения которых превышают среднее для положительных и отрицательных элементов


Далее необходимо Выполнить задания с такими дополнительными условиями (тема: “Массивы и указатели. Динамическое выделение памяти”):
* размер массива определяется в начале выполнения программы, как случайное число в диапазоне 50-200;
* память под массив выделяется динамически, на этапе выполнения программы;
в тексте программы запрещается применять операцию индексации.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2009, 22:59
Ответы с готовыми решениями:

Стек, куча, хранение в памяти, динамическое выделение памяти, указатели в чем отличие?
Здравствуйте. Прочитал кучу определений но никак не пойму вообще что к чему. 1)Стек - это якобы...

Указатели С++. Динамическое выделение памяти
Не пойму, почему перед квадратными скобками нужна звездочка? int **memoryAddr = new int *;...

Указатели и динамическое выделение памяти
пример из учебника, но у меня дает ошибку, в чем дело? на команде Dispose заранее спасибо. ...

Указатели. Динамическое выделение памяти
Задание: В массиве из T структур Table, состоящих из двух полей: указатель на имя таблицы и...

3
0 / 0 / 0
Регистрация: 20.05.2008
Сообщений: 20
11.10.2009, 01:15  [ТС] 2
вот что у меня вышлог.. подзадача 1
Код
#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "time.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int *Ar;
	int *Cr;
	int v_min = -50, v_max = 100;
	int count = 0;
	int chain = 0;
	int size;

	srand(unsigned(time(NULL)));

	size = size = rand()%150+50;
	Ar = new int [size];
	
	for (Cr = Ar; Cr < Ar + size; Cr++){
		*Cr = rand()%v_max+v_min;
		cout<<setw(3)<<*Cr<<' ';		
	}

	///////// Ниже Обработка
	return 0; 
	getch();
}
подзадача 2
Код
#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "time.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int *Ar;
	int *Cr;	
	int v_min = -100, v_max = 200;
	int min = v_min;	
	int size;

	srand(unsigned(time(NULL)));

	size = rand()%150+50;
	Ar = new int [size];
	
	for (Cr = Ar; Cr < Ar + size; Cr++){
		*Cr = rand()%v_max+v_min;		
		cout<<setw(3)<<*Cr<<' ';		
	}

	////// Ниже обработка
	return 0;
}
помогите плиз с обработкой!
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
11.10.2009, 10:21 3
шибко на думал, можно и получше сделать, но в общих чертах так (задача 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
48
49
50
51
52
53
54
55
56
57
//#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "time.h"
// Определить среднюю длину непрерывных участков положительных чисел
using namespace std;
 
//int _tmain(int argc, _TCHAR* argv[])
int main()
{
    int *Ar;
    int *Cr;
    int v_min = -50, v_max = 100;
    int count = 0;
    int chain = 0;
    int lenghtChain=0;
    int size;
 
    srand(unsigned(time(NULL)));
 
    //size = size = rand()%150+50;  // зачем два раза size?
    size=10;
    Ar = new int [size];
 
    for (Cr = Ar; Cr < Ar + size; Cr++)
    {
        *Cr = rand()%v_max+v_min;
        cout<<setw(3)<<*Cr<<' ';        
    }
 
    ///////// Ниже Обработка
    for (Cr = Ar; Cr < Ar + size; Cr++)
    {
        if (*Cr>=0) 
            ++chain;        // если положительное инкрементируем длину цепочки
        else 
            if(chain)       // длина не 0
            {
                lenghtChain+=chain; // подсчёт общей длины положит послед.
                chain=0;    // обрываем цепочку, 
                ++count;  // увеличиваем счётчик цепочек
            }       
    }
 
    if(count)
        cout<<"\nmean lenght: "<<(double)lenghtChain/count<<endl;
    else
        cout<<"\nmean lenght: 0 "<<endl;
                 
    
 
//  return 0;  это странно, сначало обычно тормозят процесс, а потом возвращаются
//  getch();
 
    system("PAUSE");
    return 0;
}
Добавлено через 29 минут
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
51
52
53
54
55
56
57
58
59
60
//#include "stdafx.h"
#include "iostream"
#include "iomanip"
#include "time.h"
 
using namespace std;
 
// Ограничить значения всех элементов, абсолютные значения которых превышают среднее для //// положительных и отрицательных элементов
//int _tmain(int argc, _TCHAR* argv[])
int main()
{
    int *Ar;
    int *Cr;    
    int v_min = -100, v_max = 200;
    int min = v_min;    
    int size;
    int meanPositiv=0, meanNegativ=0, countPositiv=0, countNegativ=0;
    
 
    srand(unsigned(time(NULL)));
 
    size = rand()%150+50;
    size=6;
    Ar = new int [size];
 
    for (Cr = Ar; Cr < Ar + size; Cr++){
        *Cr = rand()%v_max+v_min;       
        cout<<setw(3)<<*Cr<<' ';        
    }
 
    // считаем среднее для положительных и отрицательных
    for (Cr = Ar; Cr < Ar + size; Cr++)
    {
        if(*Cr>=0)  {meanPositiv+=*Cr; ++countPositiv; }
        else                {meanNegativ+=*Cr; ++countNegativ; }
    }
    if (countPositiv)  meanPositiv/=countPositiv;
    if (countNegativ)  meanNegativ/=countNegativ;
 
    // выбираем максимальное среднее 
    // но без точности то есть делим без остатка и правильного округления
    if(meanPositiv<(-meanNegativ)) meanPositiv=-meanNegativ;
 
    // ограничиваем согласно условию
    for (Cr = Ar; Cr < Ar + size; Cr++)
    {
        // несовсем понятно чем ограничивать
        // ограничиваем meanPositiv с учётом знака
        if(*Cr>meanPositiv)      *Cr=meanPositiv;
        if(*Cr<(-meanPositiv)) *Cr=-meanPositiv;        
    }
 
    cout<<"\nResult (modul limit: "<<meanPositiv<<"): ";
    for (Cr = Ar; Cr < Ar + size; Cr++){
        cout<<setw(3)<<*Cr<<' ';        
    }
  cout<<endl;
    system("PAUSE");
    return 0;
}

!!! везде установил ограничитель размера последовательности - для отладки, закоментируй или увери его на ... совсем
1
0 / 0 / 0
Регистрация: 20.05.2008
Сообщений: 20
11.10.2009, 21:38  [ТС] 4
TanT, спасибо большущее!
0
11.10.2009, 21:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2009, 21:38
Помогаю со студенческими работами здесь

Указатели и динамическое выделение памяти
Нужно заполнить массив из 200 элементов числами на промежутке , и найти последовательность из 10...

Указатели и функции. Динамическое выделение памяти
1) Напишите программу, которая позволяет вводить динамический одно-мерный целочисленный массив и...

Указатели, динамическое выделение памяти, работа с файлами.
Здрасте всем! При запуске программа выдает ошибку, связанную, как я понял, с неправильным...

Указатели, динамическое выделение памяти, работа с файлом
Программа должна предоставлять возможность нескольким пользователям работать с числовыми данными....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru