Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 21:47   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию Динамическое выделение

Если кто может,дайте расшифровку этому:

Код:
pprime = new long[max];
	*pprime = 2;
	*(pprime + 1) = 3;
	*(pprime + 2) = 5;
этому:
Код:
	found = (trial%*(pprime + i)) == 0;
этому:

Код:
	if(found == 0)
		*(pprime + count++) = trial;

и этому:
Код:
delete [] pprime;

из этого кода:


Код:
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	setlocale(0,"Russian");
	long* pprime = 0;
	long trial = 5;
	int count = 3;
	int found = 0;
	int max = 0;

	cout<<endl
		<<"Введите количество простых чисел которые хотите получить (минимум 4):";
	cin>>max;
	if(max<4)
		max = 4;

	pprime = new long[max];
	*pprime = 2;
	*(pprime + 1) = 3;
	*(pprime + 2) = 5;
do
{
	trial+=2;
	found = 0;
	for(int i = 0; i < count; i++)
	{
		found = (trial%*(pprime + i)) == 0;
		if(found)
			break;
	}
	if(found == 0)
		*(pprime + count++) = trial;
}while(count<max);

for(int i = 0; i < max; i++)
{
	if(i%5 ==0)
		cout<<endl;
		cout<<setw(10) << *(pprime + i);
}
delete [] pprime;
pprime = 0;
cout<<endl;

cin.ignore();
cin.get();
}
Просто по книге не описуются детали этих строк, сижу минут 30, не могу въехать,что они делают. Благодарю за терпение.
Golovastik вне форума
Старый 26.08.2009, 21:51   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
pprime = new long[max];  // выделяем память под массив из long'ов
	*pprime = 2;          // первый элемент = 2
	*(pprime + 1) = 3;  // второй элемент = 3
	*(pprime + 2) = 5;  // третий элемент = 5
Код:
found = (trial%*(pprime + i)) == 0;
находим остаток от деления trial на элемент массива pprime[i]. Если он равен 0, то found = 1, иначе found = 0.

Код:
if(found == 0)
		*(pprime + count++) = trial;
Если found == 0, то присваиваем count'ому элементу массива pprime значение trial и увеличиваем count.

Код:
delete [] pprime;
освобождаем память из под pprime.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 26.08.2009, 21:52   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ключевые слова для поиска:
динамическая память, получение адреса, разыменование указателя. это есть в каждой книге. все, в поиск.

Цитата:
описуются
нет такого слова в русском языке. описывается - есть
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума
Старый 26.08.2009, 22:13   #4
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Скажите, выражение:

Код:
*pprime = 2;  
*(pprime + 1) = 3;
*(pprime + 2) = 5;
Можно ли записать
Код:
 *pprime[0] = 2;
 *pprime[1] = 3;
 *pprime[2] = 5;
-------------------------------------------------------
По поводу этого выражения:
Код:
	pprime = new long[max];
Это выделение памяти под масив указателей pprime[max] ?
Golovastik вне форума
Старый 26.08.2009, 22:22   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Можно ли записать
Не совсем. Надо вот так:
Код:
 pprime[0] = 2;
 pprime[1] = 3;
 pprime[2] = 5;
Цитата:
Это выделение памяти под масив указателей pprime[max] ?
Нет. Это выделение памяти под max переменных типа long.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 26.08.2009, 22:35   #6
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Что-то не могу уяснить с этим масивом. Смотрите ещё раз на эту строку:
Код:
pprime = new long[max];
Вроде это не масив получается, так как масив описуется так. Например
Код:
int max = 0;
long s[max];
А тут как-то не ясно pprime = new long[max];

Вы пишите что это выделение под масив типом long
Как правильно понять эту строку. long[max];
long - это же не название масива, а получается что-то непонятное.

Это вроде и не масив, потому что масив имеет имя и и тип и индекс, а тут тип и индекс? Чо-то не врубаю.

Последний раз редактировалось Golovastik; 26.08.2009 в 22:42.
Golovastik вне форума
Старый 26.08.2009, 22:44   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
int max = 0;
long s[max];
Так объявляется статический массив. А это динамический..
Цитата:
Как правильно понять эту строку. long[max];
max элементов типа long.
Цитата:
long - это же не название масива, а получается что-то непонятное.
Название типа элементов массива, для которого выделяем память.

--------
При объявлении статического массива программа выделяет область памяти и присваивает адрес ее начала имени массива.
С динамическими массивами мы сами выделяем память и получаем указатель на ее начало.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 26.08.2009, 22:50   #8
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

А название масива определяется тогда вот этой строкой:
Код:
long* pprime = 0;
Если масив,тогда он должен иметь имя. Оно определяется указателем на лонг. И получается что имя масива pprime состоящий из элементов [max]
Golovastik вне форума
Старый 26.08.2009, 23:18   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вам нужно понять, что массивы и указатели более чем близки.
Массив - это область памяти. Имя массива - указатель на начало этой области.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 26.08.2009, 23:33   #10
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Имя масива(динамического) - это указатель на первый элемент масива?

Последний раз редактировалось Golovastik; 26.08.2009 в 23:36.
Golovastik вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамическое выделение памяти под верхний треугольник квадратной матрицы juventine Помощь студентам 2 12.04.2009 13:02
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52
Динамическое выделение памяти FW-TOT Общие вопросы C/C++ 2 19.12.2008 00:42