Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интереснейшая программа 
V
    Опции темы
andDavid
Дата 17.2.2010, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Создать абстрактный тип данных (структура) - вектор, который имеет указатель на float и число элементов. 
Определить функцию, которая выделяет память для массива и инициализирует данные. 
Определить 2 функции, отличающиеся только спецификатором inline, которые устанавливают элемент массива в некоторое значение, использовать их при инициализации. 
Освободить память. Сравнить время вычисления.

Код

#include <iostream>
#define N 10

using namespace std;

struct Vector
{
    float *ptr;
    float a[N];
}*p;

void Mass();
void Element ();
inline void Element();


int main ()
{
    Mass();
    
    return 0;
}

void Mass()
{
    Vector  p;
    int i;
    
    p.a[N] = *(new float); 
    for (i=0; i< N; i++)
    {        
        Element ();
        cout << p.a[i] << endl;
    }
     delete p.a;
}

inline void Element ()
{
    Vector *p;
    int i=0;
     
    p->a[i] = (float) N-i;;
    i++;
}




А код то вообще правильный, или я не то делаю?

Это сообщение отредактировал(а) andDavid - 17.2.2010, 20:12
PM MAIL   Вверх
bsa
Дата 17.2.2010, 20:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Вопрос (ответ на твой вопрос): что ты будешь делать, если тебе в программе одновременно понадобится 10 объектов типа Vector?
PM   Вверх
mes
Дата 17.2.2010, 21:08 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(bsa @  17.2.2010,  19:52 Найти цитируемый пост)
если тебе в программе одновременно понадобится 10 объектов типа Vector? 

и если они еще к тому же могут быть разного размера.. даже один и тот же вектор в разные промежутки времени может иметь разный размер.
Цитата

Интереснейшая программа

Название должно отражать суть темы, не говоря о том что повода использовать превосходную степень прилагательного не было. smile





--------------------
PM MAIL WWW   Вверх
NewDima
Дата 18.2.2010, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



Цитата(andDavid @ 18.2.2010,  02:12)
Код

#include <iostream>
#define N 10
using namespace std;
struct Vector
{
    float *ptr;
    float a[N];
}*p; // зачем заводится указатель?
void Mass();
void Element ();
inline void Element();


int main ()
{
    Mass(); //блестящий стиль... слов нет
    
    return 0;
}

void Mass()
{
    Vector  p;
    int i;
    
    p.a[N] = *(new float); // ммм, это зачем?
    for (i=0; i< N; i++)
    {        
        Element (); // как это привязать к контексту? не понимаю
        cout << p.a[i] << endl;
    }
     delete p.a; // эээ, а это ты выделял под него память, чтобы ее освобождать?
}

inline void Element ()
{
    Vector *p; // инициализировать не учили?
    int i=0;
     
    p->a[i] = (float) N-i;; //  и куда мы пишем?
    i++; // круть, если удалить, ничего не изменится
}

жуть, а не код

PM ICQ   Вверх
andDavid
Дата 18.2.2010, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Код

#include <iostream>
#define N 100
using namespace std;

struct Vector
{
    float *ptr;            //Указатель на массив элементов
    int count;            //Размерность массива
};

void Mass();
void Element (Vector p, int i);
inline void Element(Vector p, int i);

              
int main ()    
{        
    Mass();
    return 0;
}

void Mass()
{
    Vector p;
    cout << "Vvtdite razmer massiva: " << endl;
    cin >> p.count;
    float a[100];
    int i=0;
    a[ p.count ] = *(new float[ p.count ]); // выделяем память для массива
    p.ptr = a;
    
    for (i=0; i < p.count; i++)
    {    
        Element (p,i);
        cout << a[i] << " ";
    }

    
    delete a; //  <<<<<<<---- нужно удалить массив 
    
}

void Element (Vector p, int i)
{    
    p.ptr[i] = p.count-1-i; 
        
}



на delete вылазит ошибка _block_type_is_valid. Как освободть память корректно?
PM MAIL   Вверх
bsa
Дата 18.2.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



если ты память выделяешь с помощью new[], то и освобождать нужно с помощью delete[]:
Код
delete []a;
Почему книжки не читаем?
PM   Вверх
andDavid
Дата 18.2.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Код


#include <iostream>
#define N 100
using namespace std;

struct Vector
{
    float *ptr;            //Указатель на массив элементов
    int count;            //Размерность массива
};

void Mass();
void Element (Vector p, int i);
inline void Element(Vector p, int i);

              
int main ()    
{        
    Mass();
    return 0;
}

void Mass()
{
    Vector p;
    cout << "Vvtdite razmer massiva: " << endl;
    cin >> p.count;
    
    int i=0;
    p.ptr = new float[ p.count ]; // выделяем память для массива
        
    for (i=0; i < p.count; i++)
    {    
        Element (p,i);
        cout << p.ptr[i] << " ";
    }
    
    delete []p.ptr; // удаляем массив
}

void Element (Vector p, int i)
{    
    p.ptr[i] = p.count-1-i; 
        
}




книжки читаем, и не одну. А именно Дейтел, Шилд, Голуб и Прата.
Вот только сейчас дошел до примера, который помог решить задачу.
Программа работает )

Это сообщение отредактировал(а) andDavid - 18.2.2010, 23:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.