Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Abs62
Дата сообщения: 12.02.2011 10:33
Qraizer

Цитата:
И кстати, почему ">"? Почему не "<>"?

После такого and знаковый бит всегда нулевой. Значит, можно писать ">0" вместо "<>0" - экономия сил, места на экране и ресурса клавиатуры.
Автор: Qraizer
Дата сообщения: 13.02.2011 07:14
akaGM
Цитата:
...жаль что ты прочитал её как...
Та не, я её прочитал, как надо. Это ты смайлик не увидел.
Вообще-то "красивее" мне надо было в кавычки взять. Ибо такая красота... гм... относительна.
Автор: akaGM
Дата сообщения: 13.02.2011 08:18
Qraizer

Цитата:
Это ты смайлик не увидел.

увидел, но не понял что означает Шрек с высунутым языком...
кстати, знаешь, откуда пошло "как два байта переслать"?
...на 1200 бод?
:)

Цитата:
Ибо такая красота... гм... относительна.

эт ясно, что на вкус и цвет все фломастеры разные...
тока я как злостный пасквилянт тебе как злостному насильнику говорю, что
i := integer(bool_var and (j > 10)) + k;
это... красиво...
по-сишному выглядит...
:)
а вообще, настоящие программисты пишут на фортране
вот так вот!
Автор: Red Planet
Дата сообщения: 13.02.2011 19:01
Добрый вечер! Как на C++Builder 2010 отключить автодобавление при написании циклов, условий?

Автор: akaGM
Дата сообщения: 13.02.2011 23:47
Red Planet
здесь вопросы языка обсуждают, а тех. вопросы лучше в спец. теме по Билдеру задавай:
http://forum.ru-board.com/topic.cgi?forum=33&topic=4297#1
Автор: Red Planet
Дата сообщения: 19.02.2011 19:25
Здравствуйте!


Изучаю STL. Для задания правил сортировки нашел пока что два метода: через функцию и через стороннюю структуру. Оба они есть здесь. Не понял только разницы между ними.

Может один применяется в одних случаях, а другой в других? Может какой-то метод быстрее?
Тут только насчет классов вопрос выяснил: структура не получит доступа к переменной, если переменная в секции private, а вот функцию сравнения можно сделать дружественной, в то время как дружественных классов рекомендуют избегать.

Другой вопрос. Большие двумерные массивы - это плохо в любом случае? Я про скорость доступа и работы с ними. Что взамен нужно использовать?


Автор: kotlomoy
Дата сообщения: 19.02.2011 19:48
Red Planet

Цитата:
два метода: через функцию и через стороннюю структуру. Оба они есть здесь.

По ссылке я вижу два метода: через стандартную функцию и через функцию пользователя. В чем вопрос?
Автор: Red Planet
Дата сообщения: 19.02.2011 20:52
kotlomoy, вот вырезки.

Через структуру.

Цитата:
struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;

vector<int> myvector (myints, myints+8);

sort (myvector.begin(), myvector.end(), myobject);



Сортировка того же вектора через функцию.

Цитата:
bool myfunction (int i,int j) { return (i<j); }

sort (myvector.begin()+4, myvector.end(), myfunction);



По ходу еще вопрос возник.

vector<int>::iterator it; - объявление итератора для всех векторов, содержащих int?
Автор: kotlomoy
Дата сообщения: 19.02.2011 21:39
Я вообще не понимаю в чем смысл использования структур в качестве функций. Может кто разъяснить? Я - нет.

Red Planet

Цитата:
vector<int>::iterator it; - объявление итератора для всех векторов, содержащих int?

Насколько я понимаю, да
Автор: karakurt2
Дата сообщения: 20.02.2011 04:07
такие структуры в С++ называются функторами. в них можно, например, хранить какие-нибудь дополнительные данные для выполнения алгоритмов. чтобы полностью проникнуться смыслом их использования лучше прочитать несколько книг, где излагаются основы программирования на С++, например, изобретателя языка Страуструпа.
Автор: Red Planet
Дата сообщения: 20.02.2011 10:55
karakurt2, спасибо. А про массивы?

Повторюсь.

Цитата:
Большие двумерные массивы - это плохо в любом случае? Я про скорость доступа и работы с ними. Что взамен нужно использовать?


Автор: karakurt2
Дата сообщения: 20.02.2011 11:55
я бы не советовал пользоваться двумерными массивыми. есть довольно-таки интересная библиотека численного анализа, numerical recipes, где используется представление двумерных массивов в виде массива указателей, в остальных численных библиотеках используют только одномерные массивы, в процедуры передется параметр "ведущей размерности". если Вы хотите многомерные массивы в духе С++, обратите внимание на класс std::gslice, который предназначен именно для этого. если Вы хотите работать с массивами, размер которых превышает размер оперативной памяти, то можно использовать файлы отображаемые в память, для доступа к которым использовать парадигму указателей, которая автоматически будет подгружать нужный кусок в память.
Автор: V0lt
Дата сообщения: 24.02.2011 06:01
Для чего нужно ключевое слово static? Объясните по простому, пожалуйста.
Автор: ValidolX
Дата сообщения: 24.02.2011 06:37

Цитата:
Для чего нужно ключевое слово static?


на самом деле надо уточнить - в каком язике - С или С++

для С

если за телом функции - тогда определенная static переменная или функция видна ТОЛЬКО внутри того сишного файла (модуля) (тоесть извне доступиться нельзя) - ет тип аналог private в классах

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

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

Поправьте если что не так, гуру С - С++ )
Автор: Red Planet
Дата сообщения: 24.02.2011 08:50
Доброе утро!


Цитата:
// ---------------------------------------------------------------------------
#include <vcl>
#include <ctime>
#pragma hdrstop
#include <iostream>
#include <list>
#include "classes.h"

using namespace std;


class method {
    double c, d;
    public:    method () {c=0.1; d=0.1;}
            method (double res) {d=res; c=0.1;}
            friend void rand_nums (list <method>, int, double, double);
            friend void make_all_methods ();
            friend ostream& operator << (ostream &, const method &);
            friend bool sort_d (method, method);
};


// ---------------------------------------------------------------------------

int _tmain (int argc, _TCHAR* argv[]) {
    system ("title Practice");
    system ("pause");
    return 0;
}

void rand_nums (list <method> M, int n, double left, double right) {
//Реализация.
} //rand_nums.


В таком виде работает, но, когда выносишь описание класса в сторонний файл, перестает работать.


Цитата:
// ---------------------------------------------------------------------------
#include <vcl>
#include <ctime>
#pragma hdrstop
#include <iostream>
#include <list>
#include "classes.h"

using namespace std;

class mehtod;


// ---------------------------------------------------------------------------

int _tmain (int argc, _TCHAR* argv[]) {
    system ("title Practice");
    system ("pause");
    return 0;
}

void rand_nums (list <method> M, int n, double left, double right) {
//Реализация.
} //rand_nums.



classes.h

Цитата:
class method {
    double c, d;
    public:    method () {c=0.1; d=0.1;}
            method (double res) {d=res; c=0.1;}
            friend void rand_nums (list <method>, int, double, double);
            friend void make_all_methods ();
            friend ostream& operator << (ostream &, const method &);
            friend bool sort_d (method, method);
};


Ошибка возникает в объявлении функции

Цитата:
friend void rand_nums (int, double, double, list <method>);

на месте list <method>

Автор: KF121
Дата сообщения: 24.02.2011 09:01
а в classes.h, подключил #include <list>?
и чет я не догнал какое отношение имеет объявление rand_nums к методу rand_nums из класса method?
Автор: Red Planet
Дата сообщения: 24.02.2011 09:21

Цитата:
а в classes.h, подключил #include <list>?


Забыл, кроме этого нужно using namespace std
Автор: V0lt
Дата сообщения: 24.02.2011 19:37
ValidolX

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

Я вижу такой код (в начале .cpp-файла):
static const int tb[32] = {...}
Оптимизация?

В коде, с которым я работаю есть похожий массив, но не в начале .cpp-файла, а внутри условия, их даже два разных:

Код: if (...) {
int bt[] = {...}
...
}
else {
int bt[] = {...}
...
}
Автор: Abs62
Дата сообщения: 24.02.2011 20:41
V0lt
Если переменная определяется как static внутри функции, это говорит о её времени жизни, как уже было сказано. Если же вне всех функций, то здесь static имеет другое значение - оно определяет область видимости. Переменная, объявленная как static, видна только в том cpp-файле, в котором объявлена. Извне её не увидеть. Если же static не указано, к этой переменной можно обращаться и извне.
Автор: ValidolX
Дата сообщения: 24.02.2011 20:50
V0lt
если массив статичен внутри функи - значит он глобален, но видим только внутри функи

статик тут нужен если он (массив) инициализируеться лишь раз

Должен упомянуть что статик нельзя использовать если функа работает в много-поточной проге
(хотя если массив конст - why not как говорят американци
Автор: Abs62
Дата сообщения: 24.02.2011 21:10
ValidolX

Цитата:
Должен упомянуть что статик нельзя использовать если функа работает в много-поточной проге

Можно. Если не забывать об этом и при необходимости использовать средства синхронизации.
Автор: mrlika
Дата сообщения: 25.02.2011 00:21
V0lt

Для оптимизации можешь использовать static. Должно работать быстрее. Единственное - многопоточность. Но если эллементы массива константы, то и с многопоточностью автоматически все ок в твоем случае.
Автор: V0lt
Дата сообщения: 25.02.2011 05:49
всем спасибо, чуток разобрался
Автор: Red Planet
Дата сообщения: 28.02.2011 12:51
Добрый день! Имеется функция void f (), в ней выполняются какие-то действия. Для выполнения какого-либо действия нужна другая функция void g ().

Лучше выполнение функции g1 поместить внутрь f1 или выполнять их одну за другой?


Цитата:
void f {
/* Какие-то действия */
g ();
/* Какие-то действия */
}


или

Цитата:
void f {/* Действия */}
void g {/* Действия */}


На правильность не влияет.
Автор: KChernov
Дата сообщения: 28.02.2011 13:05
Red Planet

Цитата:
На правильность не влияет.

Это вопрос или утверждение?

Вообще функции - они не сами по себе - они для оптимизации повторного использования кода
Если вы разницу не видите - скорее всего её и нет.
Автор: akaGM
Дата сообщения: 28.02.2011 13:14
Red Planet
если только нет обходимости использовать локальные переменные в f()
т.к.

void f {
int local_var;

local_var = 10;
g {local_var = 20;};
}

оптимальнее в смысле разделения и использования статической памяти

int global_var;

f {global_var = 10;};
g {global_var = 20;};
Автор: Red Planet
Дата сообщения: 28.02.2011 16:11
akaGM, не понял, что оптимальнее-то.
Автор: akaGM
Дата сообщения: 28.02.2011 16:40
Red Planet
забудь...
как правильно сказали:

Цитата:
KChernov
Если вы разницу не видите - скорее всего её и нет.

тем более, что я фигню какую-то сказал...
Автор: LuckyStrike
Дата сообщения: 28.02.2011 20:31
Доброго времени, суток!
Помогте разобраться с OpenMP, ваще представления не имею и не понимаю.
Задание слудющее:
Напишите программу для вычисления интеграла на отрезке для заданной функции (ln(x)-2*sin(3*x) на отрезке [3;10]).
Рассмотрите следующие варианты:
a) Разбиение вручную отрезка на несколько частей и запуск вычислений в параллельных регионах.
б) Параллельное вычисление с синхронизацией.
в) Параллельное вычисление с редукцией.
Автор: AdVocem
Дата сообщения: 01.03.2011 17:11
Помогите разобраться с такой ситуацией:
Имеется консольное прмложение. Требуется из него запустить (желательно в фоне) другую консолную утилиту (например ping), а результат работы этой утилиты получить обратно (нужно под windows, но желатеьно как-нибудь платформонезависимо) в запускающее приложение для дальнейшей обработки. Можно конечно запустить через system и вывести в текстовый файл,

Код: int system("ping 127.0.0.1 > 1.txt")

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.