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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2012, 22:52   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию C++ Visual: массив (динамика)

Дорогие форумчане, у меня такая проблема. Мне надо изобразить динамический одномерный массив, который заполняется либо пользователем, либо генератором случайных чисел. Код написан, но там путаница с указателями (звезд прямо как на коньяке!) - и в результате, компилятор артачится на строчку выделения димамической памяти.

И плюс такая проблема - у меня сделана болванка на генерацию случайных чисел (числа с запятой и со знаком). Да компилятор говорит - что он не может преобразовывать границы, задаваемые пользователем в нужный формат.

Вы не могли бы проконсультировать, как исправить эти ошибки?
Индексы элементов массива, которые выводятся, мне нужны для дальнейшей работы.

Код:
#include "stdio.h"
#include <conio.h>
#include <iostream>
#include <time.h>

void Randomize (int n, float a, float b, float***arr);
void SelfInput (int n, float***arr);


using namespace std;

int main()
{

int n, i;
float a, b;

char chose; //peremennaja dlja vibor zapolnetija

	cout<<"Vvedite n: "<<endl;
	cin>>n;
	cout<<'\n';


float **arr;

	*arr=(float**)calloc(n,sizeof(*float));//Компилятор не принимает



/////////////Vibor zapolnenija/////////////////
cout<<"Vi hotite zapolnjat massiv s klaviatury (a) ili zapolnit ego sluchaino (b) ?"<<endl;
cin>>chose;
cout<<endl;
	
	if (chose='a')
	{
		cout<<"Vvedite granichy massiva: "<<endl;
		cin>>a;
		cin>>b;
		Randomize (n, a, b, &arr);
	}
		else
		{
			SelfInput (n, &arr);

		}

getch();
return 0;
}

////////////////////////Functsii/////////////////////////
void Randomize (int n, float a, float b, float***arr)
{
	int i;
	srand (time(NULL)*1000);
	*arr=(float**)calloc(n, sizeof(float*));
		for (i=0;i<n;i++)
		{
			//(*arr)[i]=(float*)(rand()/20001)/(b-a)+a;
			//(*arr)[i]=(float*)(rand()%20001)/(b-a)+a;
			(*arr)[i]=(float*)(rand()%101);///(b-a)+a;
			
		}

}

void SelfInput (int n, float*arr)
{
for (int i=0; i<n; i++)
		{		
			cout<<"Vvedite element massiva ["<<i<<"]:";
			cin>>arr[i];
			
			cout<<' ';

		}

}
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 14.02.2012, 23:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
*arr=(float**)calloc(n,sizeof(*floa t));//Компилятор не принимает
Нескромный вопрос: А почему не через new выделяешь памьять?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2012, 23:06   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Можно и через new... Но с ним все более менее ясно, а вот с этими calloc, malloc вожусь, чтобы привыкнуть. Контрольная грянет, скажут использовать только это и все. С непривычки завалю....вон, уже в звездочках запуталась - на лекциях вроде все понятно, а практика у нас дома, приходится самой вариться.

И я знаю, что память надо освобождать - просто это пока сама "рыба", на которую еще надо нарастить расчеты.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 14.02.2012, 23:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
скажут использовать только это и все.
Кошмар...
Я тебя малость поднапрягу примером:http://www.programmersforum.ru/showthread.php?t=117524
Если что пояснений требуй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2012, 23:24   #5
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Спасибо! Хотите, чтобы я умерла?))

А серьезно, спасибо за этот код - буду изучать.
Но у меня тоже был пример перед глазами с инт, а у меня вещественные числа.
Если бы был инт - я бы с рандомом не сидела так долго. А он, зараза, то / не принимает (проценты ему подавай), ставлю проценты вместо деления - говорит, обычное деление надо....

Я пока со звездочками разбираться буду....

Кстати, почему в этом примере описание функций приводится в самом начале? Обычно же это в конце делается, после ретурн, чтобы глаза не мозолили.....
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 14.02.2012 в 23:30.
Blondy вне форума Ответить с цитированием
Старый 14.02.2012, 23:53   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а у меня вещественные числа.
Какая разница? Мой пример и с float будет дружить.
Указателю все равно на что указывать, главно как ему разименовываться и как инкрементироваться\декрементировать ся.
Воть:
Код:
// 123.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
	// Наш массив
	float **a;
	// Запросили строки
	a=(float**)malloc(sizeof(float)*(5));
	for(int i=0;i<5;i++){
		// Запрашиваем для каждой строки элементы-ячейки
		a[i]=(float*)malloc(sizeof(float)*(5));
		// Собственно их заполняем
		for(int j=0;j<5;j++) a[i][j]=rand();
	}

	for(int i=0;i<5;i++){
		for(int j=0;j<5;j++) {
			// Выводим заполненное как обычный массив
			printf("%f5.2\n",a[i][j]);
		};			free(a[i]); //Освобождаем каждый указатель-строку
	};			free(a);// Убираем остатки массива - описания строк
	getchar();
	return 0;
}
Яволь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.02.2012, 00:05   #7
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

А с границами случайных чисел что делать? Их так и оставлять просто вещественными числами или указатели на них вешать? Согласно Вашему примеру - они прекрасно простыми числами лягут....
То есть получается, что все проблемы из-за того, что со звездочками перемудрила - ох, не люблю я их... потому как не понимаю я этой повышенной звездности.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 15.02.2012 в 00:11.
Blondy вне форума Ответить с цитированием
Старый 15.02.2012, 08:40   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А с границами случайных чисел что делать?
Не понял фразу...
Цитата:
Согласно Вашему примеру - они прекрасно простыми числами лягут....
Простыми?? Математически??
Это же такой же массив как обычно, просто запрос на его размещение в памяти даю я а не компилятор (загрузчик).
Цитата:
все проблемы из-за того, что со звездочками перемудрила
Именно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual C++ массив Афанасий[vedma] Помощь студентам 11 19.12.2011 15:21
Массив байт в Visual C# free6878 Помощь студентам 2 01.03.2011 18:54
Visual C++.Двухмерный массив sunf Помощь студентам 1 17.12.2010 16:59
Двумерный массив *( Visual C++) sunf Помощь студентам 2 07.12.2010 14:28
Одномерный массив [Visual C++] cshero Помощь студентам 2 30.11.2009 11:42