КИТА unofficial
Май 07, 2024, 05:54:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 2 3 [4] 5 6 ... 12   Вниз
  Печать  
Автор Тема: Вопросы в С/С++  (Прочитано 149695 раз)
0 Пользователей и 1 Гость смотрят эту тему.
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #60 : Март 11, 2008, 10:55:23 »

Вот программа польностью
1. Ты очень невнимательный. Проверь программу еще раз (я ошибку уже нашел).
2. Пока что много мешанины - используешь класс совершенно неправильно. Зачем передавать в методы данные, которые и так отражают состояние класса, т.е. хранятся в атрибутах? Это делает применение ООП в этой программе бессмысленным.
3. Будь внимательнее с объявлением методов. Есть отклонения от стандарта.
4. Напоминаю, здесь задаём вопросы по языку, а не "у меня не работает лаба, где ошибка?"

Ищите, исправляйте. Только так научитесь.

PS: назревает тема онлайн-консультаций? Подмигивающий
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #61 : Март 12, 2008, 12:59:22 »

Цитировать
Напоминаю, здесь задаём вопросы по языку
Строит глазки Тогда такой вопрос...
Код: (cpp)
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

class vektor
  {
    private:
int sizex;
      double *x;
 
    public:
      vektor(int size);

     ~vektor();
  };
vektor::vektor(int size): sizex(size)
  {
    x=new double[sizex];
printf("create vector \n");
  }
 
vektor::~vektor()
  {
    delete x;
printf("destroyed vector \n");
  }


class matrix
{
private:
    int nmas,mmas; 
vektor **mas;
public:
  matrix(int n,int m);
  ~matrix();
  zapol();

};
 
matrix::matrix(int n,int m): nmas(n),mmas(m)
{
  int i;
  mas = new vektor* [nmas];
  for (i=0;i<nmas;i++)
  {
    *(mas+i) = new vektor(mmas);
  }
  printf("create matrix \n");

}

  matrix::zapol()
{
int i,j;
for (i=0; i<nmas; i++)
for (j=0; j<mmas; j++)
*(*(mas+i)+j)=123;

/* for (i=0; i<nmas; i++)
{
printf("\n");
for (j=0; j<mmas; j++)
printf("%.3f  ",*(*(mas+i)+j));
}
*/
printf("\n 123 \n");
}


 matrix::~matrix()
{
 int i;
  for (i=0; i<nmas; i++)
  {
    delete *(mas+i);
  }
  delete []mas;
  printf("\n free memory \n");
  printf("destroyed matrix \n");
}

 main()
{
 int n,m;
 printf("vvedite n\n");
   scanf("%d",&n);
 printf("vvedite m\n");
   scanf("%d",&m);
vektor x(n);
matrix a(n,m);
getch();
a.zapol();
getch();
return 0;
}

Если закомментировать всю функцию zapol все нормально получается вот такой результат
Цитировать
vvedite n
2
vvedite m
2
create vector
create vector
create vector
create matrix

 123
destroyed vector
destroyed vector

 free memory
destroyed matrix
destroyed vector
Press any key to continue

Но если убрать комментарий с заполнения, то получается вот такое
Цитировать
vvedite n
2
vvedite m
2
create vector
create vector
create vector
create matrix
create vector
destroyed vector
create vector
destroyed vector
create vector
destroyed vector
create vector
destroyed vector

 123
Дальше программа вылетает...

Вопрос такой. Почему заполнение массива
Код: (cpp)
  matrix::zapol()
{
int i,j;
for (i=0; i<nmas; i++)
for (j=0; j<mmas; j++)
*(*(mas+i)+j)=123;

 вызывает вот это
Цитировать
create vector
destroyed vector
create vector
destroyed vector
create vector
destroyed vector
create vector
destroyed vector
Т е вместо заполнения получается выделение памяти и ее освобождение сразу ...
Правильно ли Artem90 дал подсказку на счет указателей ? Или надо както подругому обращаться ?


Как я понял из-за этого в последствии и вылетает программа,  тк пытается освободить память, которую уже освободили ... другой "причины" найти не могу Грустный
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #62 : Март 12, 2008, 01:17:03 »

Потому что *(*(mas+i)+j) - это вектор. А не его элемент.
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #63 : Март 12, 2008, 01:24:12 »

LazarusLong
А как обратиться к эл-ту ? Из-за этого двойного указателя не пойму ничего =\
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
LazarusLong
Ирландский доброволец
Проректор
*****

Карма: +181/-7
Offline Offline

Пол: Мужской
Награды:
А может я тоже хочу себе награду?
Сообщений: 6133


Ukrainian by birth, Irish by the grace of God


WWW
« Ответ #64 : Март 12, 2008, 01:38:17 »

Обрати внимание на то, что элементы массива внутри класса вектор у тебя хранятся в double *x. Ты же этот икс в обращении вообще не используешь. Ну и по структуре у меня есть замечания, но здесь - не лучшее место что бы их писать ))). Думайте, господа студенты ))))
Записан

Когда ему нужно - он русский, когда нужно - украинец, а когда ему ни хрена не нужно - он ирландец.

"...Он любил говорить факин щит
Когда что-то не так ему
Принимал он свой самый ирландский вид
И кидался трубкой в жену..."
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #65 : Март 12, 2008, 01:22:22 »

В общем то, что кидал перед этим, переделал вот так... хотя бы не вылетает и освобождает память ...  конечно много чего можно подругому сделать, сейчас хотя бы чтоб работало делаю  Смеющийся
Код: (cpp)
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

class vektor
  {
    private:
int sizex;
      double *x;
 
    public:
      vektor(int size);
  void setelem(int j,double num) { *(x+j)=num; }
double getelem(int j) { return *(x+j); }
     ~vektor();
  };
vektor::vektor(int size): sizex(size)
  {
    x=new double[sizex];
printf("create vector \n");
  }
 
vektor::~vektor()
  {
    delete x;
printf("destroyed vector \n");
  }


class matrix
{
private:
    int nmas,mmas; 
vektor **mas;
public:
  matrix(int n,int m);
  ~matrix();
  zapol();


};
 
matrix::matrix(int n,int m): nmas(n),mmas(m)
{
  int i;
  mas = new vektor* [nmas];
  for (i=0;i<nmas;i++)
  {
    *(mas+i) = new vektor(mmas);
  }
  printf("create matrix \n");

}

  matrix::zapol()
{
int i,j;
for (i=0; i<nmas; i++)
for (j=0; j<mmas; j++)
(*(mas+i))->setelem(j,123.321);

for (i=0; i<nmas; i++)
{
printf("\n");
for (j=0; j<mmas; j++)
printf("%.3f  ",(*(mas+i))->getelem(j));
}

printf("\n 123 \n");
}


 matrix::~matrix()
{
 int i;
  for (i=0; i<nmas; i++)
  {
    delete *(mas+i);
  }
  delete []mas;
  printf("\n free memory \n");
  printf("destroyed matrix \n");
}

 main()
{
 int n,m;
 printf("vvedite n\n");
   scanf("%d",&n);
 printf("vvedite m\n");
   scanf("%d",&m);
vektor x(n);
matrix a(n,m);
getch();
a.zapol();
getch();
return 0;
}


vimmax
Цитировать
Если выделяешь память new[] то и удалять ты должен через delete[]
Ну, я освобождаю сначала то, что выделил последнее, т е delete *(mas+i);, а потом delete []mas; ... запустил раз 10 программу с параметрами 1000х1000 вроде все нормально ...

(Отправлено в: 12 Марта 2008, 12:00:06)

Спасибо, не заметил в vektor []x;
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #66 : Март 12, 2008, 07:04:54 »

vimmax, ну что ж, тема назрела - будем и онлайн-консультации устраивать Подмигивающий Надо только подумать, как разнести по темам вопрсы по языку и консультации по программам/лабам. Где там наш модератор раздела "Программирование"? Подмигивающий

Да, vimmax, еще вопрос: что происходит при удалении массива с помощью delete[] ? Проверял - память в кучу возвращается. Знаю, что delete[] гарантирует вызов деструктора для каждого элемента, а вот как быть с необъектным типом?

ЗЫ: думал, это допускает только старый Борланд, но вот что получил от профайлера KDevelop для такого кода:

Код: (cpp)
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

using namespace std;


main(int argc, char *argv[])
{
long *x;
for (int i=0; i<1000; i++)
{
x=new long[1000];
x[i]=11;
delete x;
}

cout << "Success" << endl;

return EXIT_SUCCESS;
}

Цитировать
All heap blocks were freed -- no leaks are possible.

gcc версия 4.2.2 20071128 (prerelease) (4.2.2-3.1mdv2008.0)

И еще, вопрос к читателям: у кого-нибудь есть откорректированный релиз 2003 года стандартов C/C++, и какие компиляторы их поддерживают? У меня они есть, но старенькие: 1998 года, без коррекций 2003-го.
« Последнее редактирование: Март 12, 2008, 07:36:45 от EvilMax » Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #67 : Март 12, 2008, 11:32:32 »

EvilMax

Имеется черновик стандарта С++. Финальная версия документа платная.
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #68 : Март 12, 2008, 11:41:33 »

Off-Topic - помечено автором как "не соответствует обсуждаемой теме"
Имеется черновик стандарта С++. Финальная версия документа платная.
Ок, спасибо. Остальное - через личку.
Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
zer_owlet
Необычные пользователи
Проректор
*

Карма: +103/-16
Offline Offline

Пол: Мужской
Сообщений: 2399



« Ответ #69 : Март 13, 2008, 01:42:34 »

Я пишу максимум на VB.NET, но может таки http://www.cplusplus.com/doc/tutorial/ вот это поможет?

Найдено в гугле по "C++ manual"... Если еще и вопрос подгадать, то вообще будет отлично...
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #70 : Март 13, 2008, 01:33:49 »

Здравствуйте, у меня компилятор Borland C++ 3.11, не подскажите есть ли какая-нибудь библиотечная ф-ия для создания каталога Непонимающий

(Отправлено в: 13 Марта 2008, 12:19:23)

Спасибо! Интересная информация о работе с файлами, но к сожалению о каталогох ни слова...
Записан
TARAKAN
Tifon
Бакалавр
**

Карма: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 134


WWW
« Ответ #71 : Март 13, 2008, 01:34:50 »

artem90
гугль

Создание папки


(Отправлено в: 13 Марта 2008, 12:34:14)

Я перепутал немного ссылки ...

Помоему на такие вопросы быстрее найти ответ в поисковике можно, а не ждать ответа на форуме ...
З.Ы. кнопка дабл пост есть Подмигивающий
Записан

Студент: По моему легче использовать printf...
EvilMax: Зато cout - это тру! = ))
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #72 : Март 13, 2008, 03:06:54 »

Google руулит! Я наше создание каталога и работа сним. Может кому нибудь пригодиться: http://www.codenet.ru/progr/cpp/spr/296.php
Записан
zer_owlet
Необычные пользователи
Проректор
*

Карма: +103/-16
Offline Offline

Пол: Мужской
Сообщений: 2399



« Ответ #73 : Март 13, 2008, 11:52:17 »

Гугль -- это один из основных инструментов разработчика. Если после часа поиска вы так ничего и не нашли -- вот тогда кидайте сюда свой "очень сложные" вопросы... ИМХО, это и в правила раздела можно запихать....
Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
vimmax
Mодератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #74 : Март 18, 2008, 12:07:06 »

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

Код: (cpp)
template <class TempClass>
class vektor
 {

   private:
     int sizeX;
     TempClass *X;
 
   public:
    vektor(int size): sizeX(size)
{
   X=new TempClass[sizeX];
}

    vektor()
{
X=NULL;
sizeX=0;
};

void Init(int size)
{
sizeX = size;
if(X != NULL) delete[] X;
X=new TempClass[sizeX];
}

TempClass& operator[](int i)
{
return X[i];
}

    ~vektor()
{
if(X != NULL) delete[] X;
}

 };

int main(int argc, char* argv[])
{
vektor < vektor < int > > A; // создание объекта

A.Init(1); // инициализация строк
A[0].Init(3); // инициализация кол-ва элементов 1-ой строки

A[0][0] = 0; // обращение к элементам класса
A[0][1] = 1;
A[0][2] = 2;
return 0;
}
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
naxellar
Главный флудер
Проректор
*****

Карма: +101/-52
Offline Offline

Пол: Мужской
Сообщений: 5015

Главный флудер


« Ответ #75 : Март 18, 2008, 03:23:49 »

Дайте ссылки на информацию о создании форм и их использовании на Microsoft Visual Studio (если важно, то версия 2008) для языка C++
Записан
zer_owlet
Необычные пользователи
Проректор
*

Карма: +103/-16
Offline Offline

Пол: Мужской
Сообщений: 2399



« Ответ #76 : Март 18, 2008, 03:44:55 »

Дайте ссылки на информацию о создании форм и их использовании на Microsoft Visual Studio (если важно, то версия 2008) для языка C++


Просто ради интереса... а какие ты поисковые фразы юзал чтобы найти?

Вот тут смотрел?

ЗЫ: ну хоть вводи что-то типа пароля для лентяев -- чтобы ответили на их вопрос, нужно предъявить поисковые фразы для гугля... мож тогда пропадут вопросы, которые в MSDN найти можно...

если инет хороший, попробуй тут порыться: http://www.knigka.info/category/win32. бывают хорошие штуки
« Последнее редактирование: Март 18, 2008, 04:30:24 от Романыч » Записан



Если бы те, кто злословит обо мне, знали, что я о них думаю, они бы ещё не то говорили.

Так хочется быть добрым и порядочным, особенно, когда понимаешь, что патронов на всех никогда не хватит..

Памятка женщинам: если ты хочешь, чтоб мужчина встал на колени - разденься и встань на четвереньки.
Романыч
Я Романов!
Завкаф
****

Карма: +34/-2
Offline Offline

Пол: Мужской
Награды:
1 место в фотоконкурсе \
Сообщений: 1068


Я Русский!


« Ответ #77 : Март 18, 2008, 04:28:42 »

Почистил от оффтопа
Обновлены правила раздела "Программирование"
Романыч



2 naxellar
http://www.knigka.info/category/win32
« Последнее редактирование: Март 18, 2008, 04:39:31 от Романыч » Записан

Freelance, web designer, front-end & back-end developer, java developer, php developer. A person who enjoys designing software and building programs.
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #78 : Март 18, 2008, 04:36:53 »

naxellar

Microsoft Visual Studio 2008, а значит и .NET Framework, в плане UI это: Windows Forms или Windows Presentation Foundation на выбор. Создание и использование форм ничем не отличается от создания и использования объектов других классов.

Вызовы Win32 API хоть и поддерживаются, но смысла их использовать для создания форм не вижу никакого. Во-первых, .NET Framework уже содержит нативные средства для построения UI. А во-вторых, на целевой платформе никакого Win32 API может и не быть в принципе.
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
vimmax
Mодератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #79 : Март 18, 2008, 04:46:34 »

Sochin не совсем понял, что ты имеешь ввиду.
Цитировать
Вызовы Win32 API хоть и поддерживаются, но смысла их использовать для создания форм не вижу никакого
ведь Win32 API это сист. библиотеки Windows почему бы их не использовать ? или ты имеешь ввиду что MFC лучше ?

Цитировать
А во-вторых, на целевой платформе никакого Win32 API может и не быть в принципе.
но ведь .NET Framework не кроссплатформенная ?

можешь поподробнее ?
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
Страниц: 1 2 3 [4] 5 6 ... 12   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.099 секунд. Запросов: 35.