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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегрузка +, для матриц 
:(
    Опции темы
Maryann
Дата 20.1.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня есть 4 или 5 разных компиляторов )), но среди них нет такого, который работал бы для всех тем. Вот например с файловой системой - ни один нормально не работает, со списками - не все, приходится уродовать алгоритмы , рекурсию в деревьях они вообще не признают, а в остальном так, средненько. Вот так и живу(. Я уже вообще не верю, что нормальные компиляторы существуют(((
PM MAIL   Вверх
archimed7592
Дата 20.1.2008, 17:55 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(Maryann @  20.1.2008,  17:52 Найти цитируемый пост)
но среди них нет такого, который работал бы для всех тем.

Чушь какая-то... Если эти компиляторы начала 90-х(или старше), то совет сменить на современный уже был дан(ты ж не удивляешься, что запорожец не всегда ездит smile). Если речь о современных, то, скорее проблемы в твоих навыках, а не в компиляторах.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 20.1.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Maryann @  20.1.2008,  16:52 Найти цитируемый пост)
Я уже вообще не верю, что нормальные компиляторы существуют((( 

Ужас какой. Как же только люди во всём мире программируют, не задумывалась? smile

mingw, intel'овский, борландовский старше 98-го года, visual-овский старше 2003-го. По-моему, есть из чего выбрать smile

Добавлено через 38 секунд
archimed7592, мысли опять сходятся smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Maryann
Дата 20.1.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Если речь о современных, то, скорее проблемы в твоих навыках, а не в компиляторах.


Может быть, но часто бывает так, что на одном компиляторе программа работает, а на другом вылетает вообще. Вот сдам сессию - буду искать нормальный компилятор
PM MAIL   Вверх
archimed7592
Дата 20.1.2008, 19:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(Maryann @  20.1.2008,  18:08 Найти цитируемый пост)
Может быть, но часто бывает так, что на одном компиляторе программа работает, а на другом вылетает вообще.

 smile.

Ок, притча о программистах, у которых работает только на одном компиляторе, а на другом программа сыплется.


У меня есть ф-ция, которая меняет местами элементы в массиве. Она принимает указатель на массив и два индекса(тех элементов что нужно местами поменять).
Код

template< typename T >
void mySwap(T *array, std::size_t index1, std::size_t index2) // вот она, эта ф-ция.
{
    // тривиальный swap - можно в одну строку: std::swap(t[index1], t[index2]);
    T temp = t[index1];
    t[index1] = t[index2];
    t[index2] = temp;
}
Теперь, некоторый алгоритм насчитал мне число N, заведомо меньшее размера массива минус 2(N < arraySize - 2), и мне, по логике вещей нужно поменять местами элементы с индексами N и (N + 1). Очевидно, что для этого нужно вызвать ф-цию так: mySwap(myArray, N, N + 1); , но, так уж сложилось, что после этого вызова мне нужно работать с некоторым числом, равным N + 1, причём достаточно интенсивно(т.е. постоянно вычислять N + 1 - неэффективно). Дабы не заводить лишних переменных я решил просто увеличить N на единицу:
Код

mySwap(myArray, N, N + 1);
++N;

Но, т.к. я больно умный, я решил записать это в одну строку:
Код

mySwap(myArray, N, ++N);

Логично? Логично! Читаемо? Безусловно! Лаконично? А то! (подумал я).
Я завершил свой проект, но полгода спустя заказчик потребовал перейти на компилятор X(по каким-то, ведомым одному ему причинам).
Что ж, подумал я, сейчас настроим скрипт сборки на компилятор X и делов то! А не тут-то было... Две недели под отладчиком не принесли результата... Заказчик был недоволен. И т.д. и т.п.

Теперь, внимание, вопрос: Maryann, как ты считаешь, кто, в данной ситуации виноват, компилятор или программист?
Подумай, может не компилятор надо искать, а книгу какую-нибудь толковую, да время найти, чтобы более детально изучить язык? smile 


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ulysses4j
Дата 20.1.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

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



Цитата
кто, в данной ситуации виноват, компилятор или программист?

Конечно... заказчик!  smile 


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
archimed7592
Дата 20.1.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(Ulysses4j @  20.1.2008,  19:47 Найти цитируемый пост)
Конечно... заказчик!
Первое правило менеджера: клиент всегда прав smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Lazin
Дата 20.1.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



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

PM MAIL Skype GTalk   Вверх
Maryann
Дата 20.1.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Теперь, внимание, вопрос: Maryann, как ты считаешь, кто, в данной ситуации виноват, компилятор или программист?

здесь - программист
Цитата

Подумай, может не компилятор надо искать, а книгу какую-нибудь толковую, да время найти, чтобы более детально изучить язык?  

Книга - книгой, изучать язык - это все хорошо. Я, собственно, этим и занимаюсь. Но ведь в том, что моя перегрузка работает неправильно, виноват компилятор? Так что компилятор искать тоже надо.

Добавлено через 4 минуты и 13 секунд
Lazin, у нас в универе такие компиляторы, на которых мало что работает, там очень старые версии) . Поэтому под них никто и не пытается писать)))
PM MAIL   Вверх
Mayk
Дата 20.1.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Цитата(Maryann @  21.1.2008,  00:03 Найти цитируемый пост)
Но ведь в том, что моя перегрузка работает неправильно, виноват компилятор? 

Вина компилятора не доказана. Полный код в студию. И выполнеяемые действия, приводящие к краху.

Добавлено через 51 секунду
вспомнил пословицу: select isn't broken © кто-то


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 21.1.2008, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(Maryann @  20.1.2008,  20:03 Найти цитируемый пост)
Но ведь в том, что моя перегрузка работает неправильно, виноват компилятор?

Уже было сказано, но я повторю: если компилятор допотопный, то виновата ты, посколько выбрала такой компилятор. Если компилятор современный, то скорее всего виновата ты, посколько современные компиляторы и работают одинакого(по Стандарту) и багов в них мало(по крайней мере, наткнутся на них сложно). В конце концов, попробуй как-то более конструктивно обосновать, что виноват именно компилятор и ты увидишь, что он вовсе не виноват smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Cycle
Дата 22.1.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У-у-у-у демагогию развели. На всякий случай напомню какой был код:

Цитата(Maryann @  20.1.2008,  14:51 Найти цитируемый пост)

Код

class matrix
{
    int size; int A[20][20];
    public:
        matrix(){size=1;}
        matrix(int n){size=n;}
        //matrix(int n,int x){size=n; for(int i=0;i<size;i++)A[i][i]=x;}
        ~matrix(){cout<<"destrouctor\n";}
        void vvod();
        void vivod();
        matrix operator+(matrix o2);
};

Код

matrix matrix::operator+(matrix o2)
{
    matrix temp(size);
        //temp.size=size;
        for (int i=0; i<size;i++)
            for(int j=0;j<size; j++)
            {temp.A[i][j]=A[i][j]+o2.A[i][j];}
    return temp;
}



Maryann, если вам ещё актуально для сесии, попробуйте перегрузить оператор =. Может в нем компилятор тупит. Ещё по-моему тут неявно вызывается конструктор копирования, но за второе отвечать не буду.
PM MAIL   Вверх
archimed7592
Дата 22.1.2008, 00:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(Cycle @  22.1.2008,  00:01 Найти цитируемый пост)
Может в нем компилятор тупит.

Компилятор редко тупит... Чаще тупят программисты. К примеру, в данном случае, ни ОП, ни КК явно определять не нужно, ибо компилятор обязан определить их и, поверьте, он их определяет.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ulysses4j
Дата 22.1.2008, 01:00 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

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



Цитата(archimed7592 @  22.1.2008,  01:19 Найти цитируемый пост)
компилятор обязан определить их и, поверьте, он их определяет.

Я бы добавил: и в данном случае сгенерированные копиктор и оператор копирующего присваивания корректны. Все-таки меня терзают смутные сомнения, что от нас что-то скрывают... Maryann, вы бы выложили целиком файлы, которые не работают...

Это сообщение отредактировал(а) Ulysses4j - 22.1.2008, 01:01


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Maryann
Дата 23.1.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Полный код в студию. И выполнеяемые действия, приводящие к краху.

Цитата

... Maryann, вы бы выложили целиком файлы, которые не работают...

ну вот:
Код

#include<iostream.h>
class matrix
{
     int size; int A[20][20];
     public:
          matrix(){size=1;}
          matrix(int n){size=n;}
          ~matrix(){cout<<"destrouctor\n";}
          void vvod();
          void vivod();
          matrix operator+(matrix o2);
};
void matrix::vvod()
{
    cout<<"Enter "<<size*size<<"chisel \n";
    for(int i=0;i<size ;i++ )
        for(int j=0;j<size;j++)
        cin>>A[i][j];
}
void matrix::vivod()
{
    for(int i=0;i<size ;i++ )
        for(int j=0;j<size;j++)
        cout<<A[i][j];
}
matrix matrix::operator+(matrix o2)
{
     matrix temp(size);
          for (int i=0; i<size;i++)
                {for(int j=0;j<size; j++)
                     temp.A[i][j]=A[i][j]+o2.A[i][j];
                     cout<<"\n";
                }
     return temp;
}

void main()
{
    matrix m1(2); matrix m2(2);
    m1.vvod(); m2.vvod();
    matrix m3(2); m3=m1+m2;
}


Добавлено через 46 секунд
перед m3=m1+m2 - ошибка

Добавлено через 4 минуты и 35 секунд
Цитата

Maryann, если вам ещё актуально для сесии, попробуйте перегрузить оператор =. Может в нем компилятор тупит. 

я его перегрузила так:
Код

matrix matrix::operator=(matrix o2)
{
   for(int i=0;i<size;i++)
      for(int j=0;j<size;j++) A[i][j]=o2.A[i][j];
   return *this;
}


и он тоже не работает(
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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