Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Уроки по C++. Обсуждение.  (Прочитано 17547 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #150 : 21 Октября 2015, 16:09:16 »
alsoijw, бесконечная рекурсия при i=0;
Извините, я все еще учусь

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #151 : 21 Октября 2015, 16:38:01 »
SergeyIT, понял. Спасибо.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Olega123

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #152 : 30 Октября 2015, 22:53:48 »
Здравствуйте, а не подскажете, возможно ли в линуксе создание программы с графическими элементами (вроде кнопок, полей, переключателей) как в visual studio, просто сколько не смотрел сред разработки (Например Eclipse, Code::blocks) не нашел ничего похожего

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5589
  • Все по палатам!
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #153 : 30 Октября 2015, 23:18:10 »
Olega123, QtCreator... там много примеров. Только многое из KDE поставится
Извините, я все еще учусь

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #154 : 30 Октября 2015, 23:28:47 »
Olega123, gtkmm
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн peregrine

  • Автор темы
  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7203
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #155 : 31 Октября 2015, 08:56:44 »
Olega123, можно, как можно увидеть по скринам, у большинства на этом форуме есть графические программы. А если ты про формошлёпство, то есть QtCreator для Qt, Anjuta или Glade для GTK, CodeBlocks для WxWidgets.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #156 : 09 Ноября 2015, 16:37:55 »
Есть вектор. Функция добавления добавляет в вектор копию объекта. Можно ли как то передавать объект по ссылке а не по значению? Копируемый объект локальный. Нужно избежать преждевременного уничтожения.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #157 : 05 Марта 2016, 18:12:22 »
Помогите понять что не так. Проблем 2. 1) не работает десериализация, а если точнее теряется значение перечислений. 2) выводит левый год. Вторая проблема под линуксом не проявляется. Код писался под виндой. Спасибо.
Код: (cpp) [Выделить]
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <Windows.h>
#include <string>
#include <io.h>
#include <vector>
using namespace std;

class Event {
public:
    enum Priority {
        Low,
        Normal,
        High
    };
    enum Condition {
        Completed,
        Expired,
        Future
    };
    Priority p;
    Condition c;
    tm date;
    string name;
    string type;
    void serialization(char * &buff, int &i) {
        buff = new char[name.size() + type.size() + 12];
        i = 0;
        for(int j = 0; j < name.size(); buff[i] = name[j], ++i, ++j) ;
        buff[i] = '\0';
        ++i;
        for(int j = 0; j < type.size(); buff[i] = type[j], ++i, ++j) ;
        buff[i] = '\0';
        ++i;
        auto time = mktime(&date);
        int j = 0;
        char * temp = (char *)&time;
        for(; j < 8; buff[i] = *temp, ++temp, ++i, ++j) ;
        buff[i] = (char)p;
        ++i;
        buff[i] = c;
        ++i;
    }
    void deserialization(__int8 * buff) {
        name = string(buff);
        for(; *(buff - 1) != 0; ++buff);
        type = string(buff);
        for(; *(buff - 1) != 0; ++buff);
        int i = 0;
        time_t time;
        auto temp = (__int8 *)&time;
        for(; i < 8; *temp = *buff, ++temp, ++i, ++buff) ;
        cout << endl << "**"<<*buff<< endl;
        p = (Priority)*buff;
        ++buff;
        cout << endl << "**"<<*buff<< endl;
        c = (Condition)*buff;
    }
    void print() {
        string a[] = { "Низкий    ", "Нормальный", "Высокий   " };
        string b[] = { "Готово    ", "Просрочено", "Грядущее  " };
        auto t1 = time(0);
        auto t2 = mktime(&date);
        bool future = t1 < t2;
        if(c != Completed) c = future ? Future : Expired;
        cout << a[p] << " " << b[c] << " " << date.tm_hour << ":" << date.tm_min << " "
            << date.tm_mday << "." << date.tm_mon + 1 << "." << (date.tm_year +1900);
    }
};
vector<Event> events;
void print() {
    for(auto e : events) e.print();
}
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
#if(0)
    FILE * f;
    Event e;
    e.p = Event::Normal;
    e.c = Event::Future;
    e.name = "1";
    e.type = "1111111111";
    char * data = nullptr;
    int size;
    e.serialization(data, size);
    if(!fopen_s(&f, "data", "w")) {
        fwrite(data, size, 1, f);
        fclose(f);
    }
    if(!fopen_s(&f, "data", "r")) {
        size = _filelength(_fileno(f));
        data = new char[size];
        fread(data, size, 1, f);
        fclose(f);
    }
    char * temp1 = data;
    for(int i = 0; i < size; ++i, temp1++) {
        printf("%x ", *temp1);
    }
    cout << endl;
    e.deserialization(data);
    cout << e.type << " " << e.name << endl << " " << (bool)(e.p == Event::Normal) << (bool)(e.c == Event::Future);
    cout << endl << e.p << " " << e.c;
#endif
    //print();
    //auto str = "\x01\x02 1";
    /*char str[] = {1, 2, 3};
   
    auto ptr = (char *)&str;
    Event::Priority p = (Event::Priority)*ptr;
    ++ptr;
    Event::Condition c = (Event::Condition)*ptr;
    cout << p << " " << c << endl;*/
    events.push_back(Event());
    events[0].c = Event::Future;
    events[0].p = Event::Low;
    events[0].date.tm_mday = 30;
    events[0].date.tm_mon = 11;
    events[0].date.tm_year = (2016 - 1900);
    events[0].date.tm_hour = 4;
    events[0].date.tm_min = 30;
    print();/**/
    system("pause");
    return 0;
}

Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн peregrine

  • Автор темы
  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7203
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #158 : 05 Марта 2016, 19:45:58 »
alsoijw, с ctime сдвиг на 70 лет? Это глюки и баги от Microsoft (чем компилишь?). В Release сборке их быть не должно.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #159 : 05 Марта 2016, 19:47:48 »
peregrine, компилятор из Visual Studio 2012 x86-64. А с сериализацией проблему не поможешь решить?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн cargan

  • Активист
  • *
  • Сообщений: 492
  • Oderint, dum metuant
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #160 : 05 Марта 2016, 21:44:57 »
Olega123, Glade - GTK+

Оффлайн peregrine

  • Автор темы
  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7203
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #161 : 05 Марта 2016, 22:05:53 »
alsoijw, завтра в студии гляну, но обещать не могу, что помогу, т.к. сходу ошибку не вижу. Сейчас с ноута сижу, где у меня только Linux, а код твой чисто виндовый.

Оффлайн soarin

  • Старожил
  • *
  • Сообщений: 1850
  • ubuntu 20.04
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #162 : 13 Марта 2016, 16:11:34 »
alsoijw,
i = 0;
for(int j = 0; j < name.size(); buff[i] = name[j], ++i, ++j);
Весь код такой лютый писец, что у меня цензурных слов просто нет...
Мне кажется сначала надо основы выучить более простые, а потом уже переходить ко всяким там коллекциям и всевозможным API.
Взять какую-нибудь не очень заумную классику типа "Подбельский В.В. Язык C++"

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #163 : 13 Марта 2016, 17:42:46 »
Я уже нашёл ошибку. Перед вторымfor(; *(buff - 1) != 0; ++buff);надо сделать ++buff;Обидно что я не внимателен.
alsoijw,
Весь код такой лютый писец, что у меня цензурных слов просто нет...
У тебя претензии к оформлению кода? Мне нравится то что циклы записанны в одну строку. Мне не нравится использовать функции для возврата нескольких значений.
(Нажмите, чтобы показать/скрыть)
Да и потом я не думаю что c++ может быть красивым. Это моё убуждение^W личное мнение.
Мне кажется сначала надо основы выучить более простые, а потом уже переходить ко всяким там коллекциям и всевозможным API.
Какие основы? Я могу более менее писать свободно без отладчика на высокоуровневых языках. Сейчас меня интересуют не столько основы, сколько тонкости. Спасибо за книгу, посмотрю.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн soarin

  • Старожил
  • *
  • Сообщений: 1850
  • ubuntu 20.04
    • Просмотр профиля
Re: Уроки по C++. Обсуждение.
« Ответ #164 : 13 Марта 2016, 19:49:31 »
alsoijw,
Ко всему перетензии:
1) Смешение c++ и с. Действительно с++ весьма уродский язык, но специально делать уродство...
2) Быдлокод и велосипедостроение
Само велосипедостроение и не является плохой вещью, если ты делаешь свой аналог не в разы хуже существующего и элементарного решения. Тот же библиотечный memcpy/strcpy вполне можно оптимизировать посильнее чем то, что есть в стандартной реализации, исходя из более узкой постановки задачи.
А вообще, например, берёшь в поисковик вбиваешь элементарные вещи, типа "c++ string to char*", тебе выдаст ответ http://stackoverflow.com/questions/7352099/stdstring-to-char И не просто скопировал от туда, а подумал, прочитал в документации чего и как функции значат.
PS: оформление особой роли не играет

 

Страница сгенерирована за 0.042 секунд. Запросов: 25.