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

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

Автор: akaGM
Дата сообщения: 14.05.2012 14:21
dimon0476
нда...
ты издеваешься?
или действительно не знаешь чтО такое среда разработки, язык программирования?
и что ты с этой "портабл программой Delphi" делаешь вообще?
Автор: dimon0476
Дата сообщения: 14.05.2012 16:07
не издеваюсь! архив с программой весит 335 Мб. могу куда-нибудь скинуть. Там можно запустить Embarcadero RAD Studio XE.ехе и в интерфейсе будут и одна и другая среда. Можно каждую по отдельности отдельным файлом. Куда скинуть и как? скажите и сами посмотрите.

Добавлено:
PS: Сейчас на летитбит скину
Автор: akaGM
Дата сообщения: 14.05.2012 16:12
не надо ничего никуда кидать...
Автор: dimon0476
Дата сообщения: 14.05.2012 16:18
И как мне ее тогда показать?
Автор: akaGM
Дата сообщения: 14.05.2012 16:20
не надо ничего показывать...
на твой вопрос лично я ответить не могу...
Автор: dimon0476
Дата сообщения: 14.05.2012 16:21
ну, может кто другой ответит. Мне все-равно кто, главное - ответ получить. И по существу.
Автор: akaGM
Дата сообщения: 14.05.2012 16:25
вряд ли кто-нибудь здесь ответит...
иди лучше в "программах" спроси:

http://forum.ru-board.com/forum.cgi?forum=5

по существу...
Автор: alalpod
Дата сообщения: 16.05.2012 17:57
Здравствуйте, у меня вопрос следующего характера:

Как позволить пользователю ввести функцию типа sin(x) или там x^4+x^2?
То есть весь вопрос в том, чтобы можно было задавать различные функции в одной программе.

Для этого нужна специальная функция, или все делается через scanf и я просто туплю?
Автор: akaGM
Дата сообщения: 16.05.2012 18:08
alalpod
вводить можно что угодно, например, функцию в символьном виде...
но для этого тебе придётся использовать так называемый парсер -- подпрограммы обработки символьной информации
самому писать их уже не имеет смысла
самый лёгкий способ: поищи пример написания простого калькулятора
Автор: alalpod
Дата сообщения: 16.05.2012 18:29
akaGM
Спасибо, буду изучать.
Автор: dvigor1981
Дата сообщения: 20.05.2012 08:05
[more] Начиная C++ Builder 2009 не работают некоторые из предусмотренных возможностей. Например:

В режиме редактора кода вызываю, из контекстного меню, пункт Refactor -> Rename References to "" (в кавычках имя переменной, у которой находится курсор мыши, если курсор мыши не указывает имя переменной или объекта, меню становится неактивным и отображается серым цветом). Появляется диалоговое окно <<Rename "">> (в кавычках имя переменной). Изменяю имя переменной в окне <<New name>> и нажимаю <<OK>> (при установленной галочке "view references before refactoring"). В появившемся ниже окне <<Refactorings>> обнаруживается ошибка "Object reference not set to an instance for an object"

Если выбрать пункт контекстного меню Find -> References to "" ... (в кавычках имя переменной), среда разработки закрывается (вылетает).

В C++ Builder 2007 таких проблем нет, эти опции работают корректно.

Может кто знает как решить эту проблему? [/more]
Автор: MihaNix
Дата сообщения: 20.05.2012 12:57
Требуется выполнить задачу примерно такого характера:

/*
Описать класс вектор на плоскости,
содержащий координаты его начала и
конца, методы вывода координат на
экране и нахождения длины. Описать
производный класс, дополнительно содержащий
функцию умножения вектора на число,
скалярного произведения векторов и
сложения двух векторов. Продемонстрировать
работу всех созданных методов.
Предусмотреть интерфейс работы
пользователя с программой на основе меню.
*/

#include<stdio.h>
#include<math.h>



class vector
{
double x,y;
public:
vector(double vX=0, float vY=0) { x=vX; y=vY;} // конструктор
~vector ();
friend vector operator+(vector a, vector b); //сложение векторов
friend vector operator-(vector a, vector b); //вычитание векторов
friend vector operator*(vector a, double scalar); //умножение вектора на скаляр
friend double operator*(vector a, vector b); //скалярное произведение векторов
friend vector operator%(vector a, vector b); //векторное произведение векторов
friend double abs(vector a); //модуль вектора
};

vector operator+(vector a, vector b)
{
vector temp;
temp.x = a.x + b.x;
temp.y = a.y + b.y;

return temp;
}

vector operator-(vector a, vector b)
{
vector temp;
temp.x = a.x - b.x;
temp.y = a.y - b.y;

return temp;
}

vector operator*(vector a, double scalar)
{
vector temp;
temp.x = a.x * scalar;
temp.y = a.y * scalar;

return temp;
}

double operator*(vector a, vector b)
{
return a.x*b.x + a.y*b.y;
}


double abs(vector a)
{
return sqrt(a.x*a.x + a.y*a.y);
}
/*
функция вызывающая ошибку
vector operator%(vector a, vector b)
{
vector Ox(1,0), Oy(0,1);
return Ox*(a.y*b.y) + Oy*(a.x*b.x);
}
*/
main()
{

}
По сути непонятно как потом из ф-ции main вызывать функции класса и передавать значения переменных. Закомментированная функция вызывает ошибку - может где затупил? ну и в алгоритмах может где ляпы... Уже второй день голову ломаю - не могу понять как работают классы.
Ну и вопрос не по теме: нафига вообще эти классы сдались? Можно ведь и так в функции все оформить, а потом обращаться - мне так намного проще было бы, но к сожалению задача на классы.
Используемая среда Devcpp.
Автор: cp58
Дата сообщения: 20.05.2012 13:50
MihaNix

Цитата:
Требуется выполнить задачу примерно такого характера:

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

Базовый класс:

Код: class Vector {
double m_x,m_y;
public:
inline void x(double x) { m_x=x; };
inline double x() { return m_x; };
inline void y(double y) { m_y=y; };
inline double y() { return m_y; };
Vector(double x, double y):m_x(x),m_y(y){};
...
};
Автор: V0lt
Дата сообщения: 20.05.2012 23:46
Имеется код:

Код: int k = ...;
CString s;
s.Format(_T("%+d"), k);
// k=-5 s="-5";
// k=0 s="+0";
// k=0 s="+5";
Автор: cp58
Дата сообщения: 21.05.2012 21:36
V0lt

Цитата:
Это решаемо условием.

1 строчка кода не решает, особенно когда она не идет вразрез с производительностью, кто-то эту проверку делать все же будет.
Автор: YuraseK
Дата сообщения: 21.05.2012 21:45

Код: /**********************************************************************
* s a d j o i n
*
* Adjoin an element to an assorted list. The original list is
* modified. Returns the modified list.
**********************************************************************/
LIST s_adjoin(LIST var_list, void *variable, int_compare compare) {
LIST l;
int result;

if (compare == NULL)
    compare = (int_compare) strcmp;

l = var_list;
iterate(l) {
result = (*compare) (variable, first_node (l));
if (result == 0)
return (var_list);
else if (result < 0) {
insert(l, variable);
return (var_list);
}
}
return (push_last (var_list, variable));
}
Автор: cp58
Дата сообщения: 21.05.2012 22:12
YuraseK

Цитата:
Для этого кода bcc32 выдаёт:
Error E2238: Multiple declaration for 'FeatureBase'
Error E2344: Earlier declaration of 'FeatureBase'

Класс второй раз объявлется где-то.

Цитата:
result = (*compare) (variable, first_node (l));

Разыменовывать указатель на функцию не требуется, достаточно просто вызывать как любую другую.
compare(variable, first_node(l)
Автор: YuraseK
Дата сообщения: 21.05.2012 22:33
cp58
Первую проблему решил написав рядом обвёртку для strcmp, а затем использовал её, и всё скомпилировалось:

Код: int strcmp2(const char *s1, const char *s2) {
return strcmp(s1, s2);
}

{...}
if (compare == NULL)
compare = (int_compare) strcmp2;
{...}
Автор: kotlomoy
Дата сообщения: 21.05.2012 23:25
YuraseK
"Error E2344: Earlier declaration of 'FeatureBase' " - здесь обычно указывается, где именно этот earlier declaration находится. В bcc32 разве не так?
Автор: cp58
Дата сообщения: 21.05.2012 23:27
YuraseK

Цитата:
Всё перерыл. Класс объявлен только в одном месте.

В месте может и одном, но возможно этим местом является заголовочный файл, который подключается дважды и не имеющий защиты от повторного подключения
#ifndef SOME_HEADER
#define SOME_HEADER
...
#endif


Цитата:
Можно ли как-то объявить такой тип, чтобы bcc32 не ругался?

typedef unsigned long long uintmax_t;
Автор: YuraseK
Дата сообщения: 21.05.2012 23:56

Цитата:
В месте может и одном, но возможно этим местом является заголовочный файл, который подключается дважды и не имеющий защиты от повторного подключения
#ifndef SOME_HEADER
#define SOME_HEADER
...
#endif

С этим всё в порядке. Дело оказалось в неподключенном iostream.h в заголовочном файле, описывающем класс CharSamp, который используется в классе FeatureBase. Уже который раз замечаю, что если используется string.h и не указан iostream.h, то возможны проблемы с компилятором.


Цитата:
typedef unsigned long long uintmax_t;

Спасибо.
Автор: Terranos
Дата сообщения: 06.06.2012 07:39

Цитата:
Здравствуйте, у меня вопрос следующего характера:

Как позволить пользователю ввести функцию типа sin(x) или там x^4+x^2?
То есть весь вопрос в том, чтобы можно было задавать различные функции в одной программе.

Для этого нужна специальная функция, или все делается через scanf и я просто туплю?


Используйте конструкцию switch. При выборе действия выполняется нужная операция. Что бы программа не завершалась после каждой выполненной операции, рекомендую вставить все, связанное с выводом информации о выборе и саму обработку выбора в цикл, условием которого будет разность введенной команды с командой завершения работы.
Автор: cp58
Дата сообщения: 06.06.2012 12:23
Terranos

Цитата:
Используйте конструкцию switch. При выборе действия выполняется нужная операция. Что бы программа не завершалась после каждой выполненной операции, рекомендую вставить все, связанное с выводом информации о выборе и саму обработку выбора в цикл, условием которого будет разность введенной команды с командой завершения работы.

Что?
Автор: Terranos
Дата сообщения: 06.06.2012 22:21

Код:
#include <iostream>
#include <locale.h>
#include <math.h> // Для математических ф-ций

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
int gNum = 0;

do
{
cout << " Выберите нужное действие: " << endl;
cout << "1 - Выполнение операции №1\n"
<< "2 - Выполнение операции №2\n"
<< "3 - Выполнение операции №3\n"
<< "0 - Выход";
cin >> gNum;

switch(gNum)
{
case 1:
// Код выполнения операции
break;
case 2:
// Код выполнения операции
break;
case 3:
// Код выполнения операции
break;
case 0:
// Т.к. 0 - выход, то ничего не делаем.
break;
}
}while(gNum != 0);

system("Pause");

return 0;
}
Автор: cp58
Дата сообщения: 07.06.2012 01:39
Terranos

Цитата:
пользователю ввести функцию

Где здесь ввод функции? Я вижу только выбор, заложенный программистом.
Автор: Terranos
Дата сообщения: 07.06.2012 07:49
В данном коде предложена конструкция для решения поставленной задачи, а не полное разжевывание задачи. Если вы хотите быть программистами, то доделывайте сами.

В выборе предлагается пользователю выбрать операцию, производимую над неким числом, которое вы добавите сами (значение Х), из подключенной библиотеки math.h берете нужную ф-цию, аргументом которой будет ваше значение, при выборе которого производится операция над этим значением
Автор: kenny5705
Дата сообщения: 07.06.2012 13:35
Поможете осуществить сортировку внутри строки? Чет не могу сообразить.
Есть строка типа string.
Вида "B1A4C2A3D1" - содержит буквы английского алфавита от A до D, и связанные с ними цифры от 1 до 4. В1 или А4 - характеризует один элемент. Строка содержит различное количество символов, но всегда четное.
Нужно отсортировать строку, сначала по буквам по возрастанию, затем по цифрам, тоже по возрастанию.
Т.е. должно получиться:
из "B1A4C2A3D1" -> "A3A4B1C2D1"
или еще пример:
из "D1D2A4" -> "A4D1D2"
А всё это мне нужно для курсового по дискретной математике. Модель шахматной доски, если вкратце.

UPD:
А все, не надо, походу сам додумался. Стоило лишь правильно сформулировать цель, и идея сама пришла
Автор: karakurt2
Дата сообщения: 07.06.2012 16:46
kenny5705

Код:
#include <algorithm>
#include <iterator>
#include <iostream>
#include <sstream>
#include <vector>
#include <iomanip>

struct foo
{
    char letter;
    char number;
};

std::istream& operator>>(std::istream& in, foo& f)
{
    return in >> f.letter >> f.number;
}

std::ostream& operator<<(std::ostream& out, const foo& f)
{
    return out << f.letter << f.number;
}

bool order_rule(const foo& lhs, const foo& rhs)
{
    return (lhs.letter < rhs.letter || lhs.letter == rhs.letter && lhs.number < rhs.number);
}

std::string do_sort(const std::string& s)
{
    std::vector<foo> x;
    std::copy(std::istream_iterator<foo>(std::istringstream(s)),
        std::istream_iterator<foo>(), std::back_inserter(x));

    std::sort(x.begin(), x.end(), order_rule);

    std::ostringstream o;
    std::copy(x.begin(), x.end(), std::ostream_iterator<foo>(o));

    return o.str();
}

int main()
{
    std::cout << do_sort(std::string("B1A4C2A3D1")) << std::endl;
    return 0;
}
Автор: kenny5705
Дата сообщения: 08.06.2012 17:23
karakurt2
я проще решил сделать... т.к. у меня всего 16 возможных сочетаний букв и цифр, я сделал проверку на каждый элемент, что и в итого дает нам отсортированную строку...
[more]

Код: string sortElementByVariable( string str )
{
    string newstr;
    if( str.find( "A1" ) != string::npos )
        newstr.append( "A1" );
    if( str.find( "A2" ) != string::npos )
        newstr.append( "A2" );
    if( str.find( "A3" ) != string::npos )
        newstr.append( "A3" );
    if( str.find( "A4" ) != string::npos )
        newstr.append( "A4" );

    if( str.find( "B1" ) != string::npos )
        newstr.append( "B1" );
    if( str.find( "B2" ) != string::npos )
        newstr.append( "B2" );
    if( str.find( "B3" ) != string::npos )
        newstr.append( "B3" );
    if( str.find( "B4" ) != string::npos )
        newstr.append( "B4" );

    if( str.find( "C1" ) != string::npos )
        newstr.append( "C1" );
    if( str.find( "C2" ) != string::npos )
        newstr.append( "C2" );
    if( str.find( "C3" ) != string::npos )
        newstr.append( "C3" );
    if( str.find( "C4" ) != string::npos )
        newstr.append( "C4" );

    if( str.find( "D1" ) != string::npos )
        newstr.append( "D1" );
    if( str.find( "D2" ) != string::npos )
        newstr.append( "D2" );
    if( str.find( "D3" ) != string::npos )
        newstr.append( "D3" );
    if( str.find( "D4" ) != string::npos )
        newstr.append( "D4" );
    return newstr;
}
Автор: cp58
Дата сообщения: 09.06.2012 01:00
karakurt2
Много кода, для такой простой задачи.
Проще с хаком.

Код: #include <string>
#include <stdlib.h>

int comparator(const char *a, const char *b)
{
return a[0] == b[0] ? a[1]-b[1]: a[0]-b[0];
}

int main()
{
std::string str("B1A4C2A3D1");
qsort((void*)str.data(), 4, 2, (int (*)(const void*, const void*))comparator);
}

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

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


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