Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как соединить несколько частей слова в одно слово? соединение частей слова 
:(
    Опции темы
Dreamuchiy
Дата 13.4.2008, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня такая проблема: Как сделать слово из частей или букв? Например если есть три переменные типа char s1='a', char s2 = 'b', char s3 = "c". Нужно что бы в Memo получилась строка вида "abc". Затем следущая строка с другим содержимым. Как вобще организовать вывод в Мемо любых символов друг за другом в строку или как сделать из нескольких переменных строку для вывода ее в Memo? Я пробовал использовать функцию strcat c с файлом string.h, но оно ваще не работает а строка была такая : strcat (s1,s2,s3) Не работает оно! Помогите плиз! Если не сложно то с комментариями
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
586
Дата 13.4.2008, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
char s1 = 'a', s2 = 'b', s3 = 'c';
String s = s1;
s += s2;
s += s3;
Memo1->Lines->Add(s);

Код
char s[20];
char s1 = 'a', s2 = 'b', s3 = 'c';

s[0] = s1;
s[1] = s2;
s[2] = s3;
s[3] = 0;
Memo1->Lines->Add(s);

Код

char s[20];
char *s1 = "aa", *s2 = "bb", *s3 = "cc";
strcpy(s, s1);   // копирование
strcat(s, s2);   // дополнение
strcat(s, s3);
Memo1->Lines->Add(s);

PM   Вверх
Dreamuchiy
Дата 13.4.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



последний вариант у меня не работает! Ошибка
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
Rodman
Дата 13.4.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



а через обычный плюс???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
586
Дата 13.4.2008, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Dreamuchiy @  13.4.2008,  22:32 Найти цитируемый пост)
последний вариант у меня не работает! Ошибка 

Что за ошибка?
PM   Вверх
Dreamuchiy
Дата 14.4.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот собственно прога с третим вариантом:
Код


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

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <cstring.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
         Memo1->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
        char s[20];
        char *s1 = "aa", *s2 = "bb", *s3 = "cc";
        strcpy(s, s1);   // êîïèðîâàíèå
        strcat(s, s2);   // äîïîëíåíèå
        strcat(s, s3);
        Memo1->Lines->Add(s);
}

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

void __fastcall TForm1::Button3Click(TObject *Sender)
{
        Form1->Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        if (SaveDialog1->Execute())
        Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button5Click(TObject *Sender)
{
        Memo1->Clear();
}
//---------------------------------------------------------------------------



билдер указывает на строку char s[20];
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
Dmi3ev
Дата 14.4.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

билдер указывает на строку char s[20]; 

надо поставить { перед char s[20]; тк функция начинается с {, а вы ее стерли  smile 


--------------------

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


Шустрый
*


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

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



Понятное дело, что поздно, но я нашёл тему случайно, значит и другие могут найти. Поэтому решил ответить на вопрос. Накидал несколько возможных вариантов.
Код

// -------------------------------------------------------------
// Пример конкатенации трёх символов в строку
// -------------------------------------------------------------

// Подключаемые заголовочные файлы
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>

// Символы
static const char a = 'a';
static const char b = 'b';
static const char c = 'c';

// Прототипы
void func1(const char& x1, const char& x2, const char& x3);
void func2(const char& x1, const char& x2, const char& x3);
void func3(const char& x1, const char& x2, const char& x3);
void func4(const char& x1, const char& x2, const char& x3);
void func5(const char& x1, const char& x2, const char& x3);
void func6(const char& x1, const char& x2, const char& x3);
void func7(const char& x1, const char& x2, const char& x3);
void func8(const char& x1, const char& x2, const char& x3);
int main(int, char**);

// Вариант в стиле C++03 с STL
void func1(const char& x1, const char& x2, const char& x3)
{
    std::string res = std::string();

    res = x1;
    res += x2;
    res += x3;

    std::cout << res << std::endl;
}

// Вариант в стиле C89
// (на ссылочный тип в параметрах функции, который есть в C++,
// но которого нет в C89 не обращаем внимания)
void func2(const char& x1, const char& x2, const char& x3)
{
    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

    if(res = (char*) calloc(4, sizeof(char)))
    {
        if(strncpy(res, &x1, 1) && strncat(res, &x2, 1) && strncat(res, &x3, 1))
        {
            (void) printf("%s\n", res);
        }
        else
        {
            (void) printf("Ошибка при работе со строками!\n");
        }

        free(res);
    }
    else
    {
        (void) printf("Ошибка при выделении памяти!\n");
    }
}

// Вариант в стиле С89 в смеси с C++03 и STL
// (данный метод лучше не использовать - просто
// демонстрация возможности совокупного использования обоих подходов)
void func3(const char& x1, const char& x2, const char& x3)
{
    std::string res = std::string();

    res = x1;
    res += x2;
    res += x3;

    (void) printf("%s\n", res.c_str());
}

// Вариант C89 с использование возможности printf
void func4(const char& x1, const char& x2, const char& x3)
{
    (void) printf("%c%c%c\n", x1, x2, x3);
}

// Предыдущий вариант, но с копированием во вспомогательную строку
void func5(const char& x1, const char& x2, const char& x3)
{
    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

    if(res = (char*) calloc(4, sizeof(char)))
    {
        (void) sprintf(res, "%c%c%c", x1, x2, x3);
        (void) printf("%s\n", res);

        free(res);
    }
    else
    {
        (void) printf("Ошибка при выделении памяти!\n");
    }
}

// Вариант C89 с адресной арифметикой
void func6(const char& x1, const char& x2, const char& x3)
{
    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

    if(res = (char*) calloc(4, sizeof(char)))
    {
        *(res + 0) = x1;
        *(res + 1) = x2;
        *(res + 2) = x3;

        (void) printf("%s\n", res);

        free(res);
    }
    else
    {
        (void) printf("Ошибка при выделении памяти!\n");
    }
}

// Вариант C89 с адресной арифметикой (другой вариант)
void func7(const char& x1, const char& x2, const char& x3)
{
    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

    if(res = (char*) calloc(4, sizeof(char)))
    {
        *res = (*(res + 2) = x3, *(res + 1) = x2, x1);

        (void) printf("%s\n", res);

        free(res);
    }
    else
    {
        (void) printf("Ошибка при выделении памяти!\n");
    }
}

// Вариант C89 с массивами
void func8(const char& x1, const char& x2, const char& x3)
{
    char res[4] = {0, 0, 0, 0};

    res[0] = x1;
    res[1] = x2;
    res[2] = x3;

    printf("%s\n", res);
}

// Точка входа - главная функция
int main(int argc, char** argv)
{
    (void) argc;
    (void) argv;

    func1(a, b, c);
    func2(a, b, c);
    func3(a, b, c);
    func4(a, b, c);
    func5(a, b, c);
    func6(a, b, c);
    func7(a, b, c);
    func8(a, b, c);

    return 0;
}

// -------------------------------------------------------------
// End of file
// -------------------------------------------------------------


К тому же не забывайте, что в Builder есть ещё целый ряд своих классов по типу AnsiString, UnicodeString и другие. Можете написать собственные классы. Можно на темплейтах соорудить что-нить. Можно написать универсальные функции или методы с неопределённым количесвтом параметров (...) и т.д. Проявите фантазию! Задача крайне элементарная и очень тривиальная!


А автору хочу сказать, что прежде чем паниковать и писать "Ааа! Не работает оно! Помогите!", надо сначала просто внимательно изучить документацию, благо её много! Книги Страуструпа, Шилда, Кернигана и Ритчи и т.п. К тому же есть сайтик полезный: http://www.cplusplus.com/
strcpy имеет два параметра, так же как и strcat (а вы передавали ей три, притом, вас не интересовало в какую область памяти будет происходить копирование и какие типы данных вы ей передаёте). Если бы поискали, обнаружили что есть ещё sstream. Там всё ещё проще! Человек не пытался читать документацию, а сразу полез на форум. На форуме помогают решить проблему. А ваша лень и невнимательность - это проблема, которую на форуме помочь решить не могут.

Надеюсь, сейчас вы более внимательны и вдумчивее читаете документацию. Если как-то задел вас - прошу прощения.

Это сообщение отредактировал(а) Bodro - 21.6.2012, 16:25
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
volatile
Дата 22.6.2012, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Bodro @  21.6.2012,  16:20 Найти цитируемый пост)
void func6(const char& x1, const char& x2, const char& x3)
{
    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

    if(res = (char*) calloc(4, sizeof(char)))
    {
        *(res + 0) = x1;
        *(res + 1) = x2;
        *(res + 2) = x3;

        (void) printf("%s\n", res);

        free(res);
    }
    else
    {
        (void) printf("Ошибка при выделении памяти!\n");
    }
}


Цитата(Bodro @  21.6.2012,  16:20 Найти цитируемый пост)

    char* res = NULL; // В C++ лучше указывать 0 вместо NULL

Похвально конечно. хотя в данном случае можно и вовсе не инициализировать.
(не упоминал бы если бы не пропуск действительно необходимой инициализации, см. ниже)

Цитата(Bodro @  21.6.2012,  16:20 Найти цитируемый пост)

    if(res = (char*) calloc(4, sizeof(char)))

sizeof(char) - зачем? у вас много лишнего времени? sizeof(char) == 1 по определению.

Цитата(Bodro @  21.6.2012,  16:20 Найти цитируемый пост)

*(res + 0) = x1;
*(res + 1) = x2;
*(res + 2) = x3;

А где      
        *(res + 3) = 0; 
Вот этого пропускать нельзя!
Иначе программка может напечатать вам роман Л.Толстого "Война и Мир", с последующим выпадением в осадок.

Цитата(Bodro @  21.6.2012,  16:20 Найти цитируемый пост)

        (void) printf("%s\n", res);

зачем (void) ?

Излишняя тщательность (граничащая с параноей),
И одновременно халатность, там где инициализация просто необходима.

Добавлено через 1 минуту и 39 секунд
Прошу прощения, за придирки. Что-то на меня нашло. Сорри.

PM MAIL   Вверх
Bodro
Дата 23.6.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вы, судя по всему, не очень хорошо знаете язык. smile Дело в том, что функция calloc эквивалентна вызову malloc и последующим memset с нулями. После вызова calloc все 4 байта будут нулями. Я понимаю, придраться хочется, но лучше, прежде чем придираться, попробовать собрать код и посмотреть на него в отладчике.
Код

/* Allocates a block of memory for an array of num elements, each of them size bytes long, and initializes all its bits to zero. */

void* calloc(size_t num, size_t size);

Например, тут описание calloc: http://www.cplusplus.com/reference/clibrary/cstdlib/calloc/
Тут malloc: http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/
Тут memset: http://www.cplusplus.com/reference/clibrary/cstring/memset/

Аналог кода с calloc можно написать так (malloc и memset):
Код

res = (char*) malloc(4 * sizeof(char));
(void) memset(res, 0, 4 * sizeof(char));

По поводу (void) перед функциями, возвращающими значение. Дело в том, что некоторые компиляторы (например компилятор для процессоров на ядре SH4) сильно ругаются на это. Так же ругаться может gcc. По-стандарту, мы обязаны обработать значение, которое возвращает функция. Если мы этого не делаем, то должны явно указать что мы не собираемся использовать возвращающий результат. Борланду плевать на это, а другие компиляторы могут ругаться. Во многих библиотеках есть специальные макросы для этого, например, макрос в Qt: Q_UNUSED. Если вам не нравится (void) (иногда есть ситуации, когда компилятор ругается на (void), только несколько другими сообщениями - такое тоже может быть), можете использовать в С99 или в С++ такую функцию:
Код

/* Функция подавления неиспользуемого значения типа int */
inline void suppress_unused_return(int unused) {}

/* Пример использования */
suppress_unused_return(printf("%s\n", res));

Всегда старайтесь писать код, чтобы при включённой опции компилятора -Wall или аналогичной полностью отсутствовали предупреждения.

По поводу излишней инициализации. Открываем книгу ISBN 5-8459-0226-6, глава 27. Читаем полностью. Это, конечно, касается не C++, а C, но сути это не меняет. Герберт Шилдт очень хорошо описал правила проектировки программ на C. В том числе и о неоходимости явной инициализации локальных переменных.

По поводу 0 вместо NULL. Читаем тут: ISBN 978-5-7989-0425-9 параграф 5.1.1. Это Б.Страуструп.

Теперь по поводу sizeof(char) == 1 по-определению. Скажите мне, по какому такому определению? Лично я никогда не сталкивался с тем, что sizeof(char) больше 1, но это не означает что такого не может быть. Посмотрите на другие типы данных - int, long, long long, short. Они какие должны быть по-определению? Они от машины к машине, от компилятора к компилятору могут быть совершенно разные! В таких случаях лучше использовать stdint для явного указания размера. Это раз. А второе, указание sizeof(char) явно говорит человеку, читающему программу, что мы не просто выделяем какой-то блок данных, а что мы выделяем его именно для 4 символов. В данном случае это, конечно, не столь важно - пример крайне простой, но вот в более сложном и громозком коде это может существенно облегчить чтение и понимание программы. Скажем так, это просто хороший стиль написания. Хотя я не исключаю наличие систем с sizeof(char) отличным от 1. Споры затевать не надо на эту тему - свою позицию я объяснил.

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

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

Так же заметил, что в func8 перед printf забыл поставить (void).


Вы согласны со мной?

Это сообщение отредактировал(а) Bodro - 23.6.2012, 16:23
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
volatile
Дата 23.6.2012, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Bodro @  23.6.2012,  16:15 Найти цитируемый пост)
Вы согласны со мной?

Bodro, по поводу calloc, и инициализации нулями, да вы правы.

Цитата(Bodro @  23.6.2012,  16:15 Найти цитируемый пост)
Теперь по поводу sizeof(char) == 1 по-определению. Скажите мне, по какому такому определению? 

Цитата(ISO/IEC 14882:2011)

5.3.3 Sizeof 
1 <...> sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1. <...>


PM MAIL   Вверх
Bodro
Дата 24.6.2012, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Очень рад что наш разговор заставил вас заглянуть в стандарт C++11, к сожалению, в настоящее время мало кем поддерживаемым (я знаком только с gcc кто более или менее в полной мере его поддерживает). Больше, я так понимаю, добавить вам нечего?

Но по поводу стандарта вы совершенно правы - char не меняется ни в C ни в C++. Занимает ровно 1 байт. Он прописан во всех стандартах. Про sizeof(char) я уже написал достаточно - дело не только в стандарте, но ещё и в читабельности кода. К тому же, если вы опытный программист, то должны знать, что стандарт не поддерживает полностью практически ни один компилятор. Я уже об этом говорил, что я не встречал систему, где char занимал бы более чем 1 байт. Но это ни в коей мере не говорит о том что такого не может быть! Это просто хороший стиль написания кода! Если вы с ним не согласны - не используйте его - пишите просто 1. Никто вас не неволит - не вижу тут никакой ошибки.

Вот в каждом форуме найдётся человек, который домотается до мелочей, а про суть ничего не скажет. Вам просто надо было показать что вы тоже многое знаете? Показали? Молодец. Я не сомневался что вы умный и талантливый человек. Я видел ваши ответы - очень грамотные и чёткие. Но, вместо того, чтобы искать соринки в моём коде (я так понимаю, мы выяснили что их там нет), лучше бы написали ещё в с десятка два примеров как реализовать конкатеницию символов. Это было б куда полезнее, чем пытаться развести тут холивар. К тому же, судя по всему, вы хорошо знаете C++11 - вот и привели бы примеры с замыканиями и лямбдой.

Если вам хочется всё же продолжить данную тему, предлагаю перенести её в нашу личную беседу посредством личных сообщений. Но для начала вы попробуйте собрать представленный мной код на любой платформе и на любом компиляторе. Если будут проблемы - что-то упадёт или что-то не заработает - пишите! Буду рад обсудить с вами реальную интересную задачу. А тратить время на пустую болтовню считаю бессмысленной затеей. Вы, разве, не согласны?
Предлагаю просто закрыть тему! К тому же ей уже 4 года! Я написал несколько примеров рабочего кода, проверил их. Код работает. Думаю, это главное для решения задачи.

Модератор, для предотвращения холивара - закрывай тему. smile

Это сообщение отредактировал(а) Bodro - 24.6.2012, 00:14
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
volatile
Дата 24.6.2012, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Bodro @  24.6.2012,  00:06 Найти цитируемый пост)
наш разговор заставил вас заглянуть в стандарт C++11, к сожалению, в настоящее время мало кем поддерживаемым 

Ну собственно в стандарте ISO/IEC 14882:1998, ISO/IEC 14882:2003, таже самая фраза. Цитировать не буду, можете посмотреть сами, она и там, под тем же самым номером 5.3.3.
Или и стандарты 1998 и 2003 года тоже мало кем поддерживаются?
просто sizeof измеряет размер в чарах, (чему бы не был равен чар!)
сдедовательно sizeof (char) - это тафталогия.

Цитата(Bodro @  24.6.2012,  00:06 Найти цитируемый пост)
Вам просто надо было показать что вы тоже многое знаете? 

Bodro, нет! Меня просто раздразило излишнее многословие в вашем коде.  (выдаваемое за кроссплатформенность)
Не знаю почему, но меня это раздразило.
Обычно я не вступаю в дискуссию по стилю написания, потому-что у каждого свой стиль. И лезть со своими мерками - моветон.
Цитата(volatile @  22.6.2012,  01:10 Найти цитируемый пост)
Прошу прощения, за придирки. Что-то на меня нашло. Сорри.


PM MAIL   Вверх
Bodro
Дата 24.6.2012, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ok
PM MAIL WWW ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Dem_max
Дата 24.6.2012, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

/* Функция подавления неиспользуемого значения типа int */
inline void suppress_unused_return(int unused) {}

/* Пример использования */
suppress_unused_return(printf("%s\n", res));

Это же надо было такую дурацкую конструкцию придумать.


Цитата

sizeof(char) - зачем? у вас много лишнего времени? sizeof(char) == 1 по определению.

Компилятор уже будет знать размер на стадии компиляции. а вот calloc(4, sizeof(char)) выделение 4 байтов памяти это вообще пипец.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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