Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: (уже готовое, часть1 )(ansi c++)  (Прочитано 16301 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 10-05-2007 17:57 » 

Q:Где найти компилятор GNU C/C++ под винду или DOS ?


A:
Тут:
http://gcc.gnu.org/install/binaries.html
MinGW и Cygwin - под Windows
DJGPP - под DOS



Q:Как сравнить два double или float?
Обычный == тут не проходит...


A:
равенство чисел с плавающей точкой можно определить
только с некоторой точностью accuracy :

(модуль(num1-num2))<accuracy

например, при помощи некого макроса my_is_equ

Код:
#define accuracy 0.0000001
#define my_is_equ(num1,num2) ((bool)(fabs(num1-num2)<accuracy))


double d1,d2;

//...

//if(d1==d2)
if(my_is_equ(d1,d2))
{
//...
}




Q:Как программно задать число знаков после запятой
у float при преобразовании в CString?


A:
В CString::Format в спецификаторе числа разрядов можно
поставить '*' , тогда соответствующий по порядку аргумент
будет интерпретирован число знаков после запятой

Пример.
Код:
CString txt;
float f=1.234567;
txt.Format("%.*f",3,f);

//будет выведено
float f=1.235;




Q:Как преодолеть такую ситуацию: при вводе текста
в переменную считываются только те символы, которые
шли до пробела, а мне необходимо считать всю строку
целиком:

char test1[20],test[20];
cin>>test; //ввожу: "текст с пробелом"
cout<<test<<"\n"; //выводится: "текст"
scanf("%s",test1); //ввожу: "текст с пробелом"
printf("%s",test1); //выводится: "текст"

Как это обойти?


A:
использовать getline()

Код:
string buffer;
getline(cin, buffer, '\n');
cout << buffer << endl;


« Последнее редактирование: 06-07-2007 19:31 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 11-05-2007 17:41 » new

Q:Как в C++ проинициализировать массив?


A:
Примеры:

int array1[]={1,2,5,10,20,50,10,20,50,10,20,50,10,20,50};
int array2[5]={1,2,5,10,20};
int array3[5]={1,2};

//для члена класса
class A
{
  static int array[];
};
int A::array[]={1,2,5,10,20,50,10,20,50,10,20,50,10,20,50};




Q:Какой функцией можно генерировать случайные числа?


A:
функция rand() возвращает псевдослучайное число в
диапазоне от 0 до RAND_MAX (==0x7fff)

Код:
#include <climits>

int rand( void );




Q:Имеется класс с конструктором, который принимает параметры.
Есть наследник. Как из конструктора наследника передать параметры
конструктору базового класса?


A:

Код:
child: public parent
{
public:
child(mytype var1): parent(var1) {}
};



Q:Столкнулся с такой ситуацией:

Имеется два класса. Class1 содержит член данных типа Class2.
Class2 m_Data;

а Class2 содержит указатель типа Class1
Class1* m_pData;

то есть перед Class1 нужно прописать #include "Class2.h",
а перед Class2 - #include "Class1.h". Компилятор выдает
кучу ошибок переопределения. Как решается такая ситуация?


A:
Если Class2 содержит только указатель на Class1, достаточно
объявить Class1 без определения. Таким образом можно
разорвать этот замкнутый круг.

Этот прием годится лишь для инстанцирования указателей,
поскольку под указатель на платформе x86 отводится 4 байта
независимо от типа, на который он указывает.

Код:
class Class1;

class Class2
{
  ...
private:
  Class1 *m_pClass1;
...
};



Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 07-07-2007 14:54 » 

далее - добавлено 7 июля 2007
Q:
Как всё, что выводится в cout,вывести в файл?

A:
Можно перенаправишь поток cout при запуске программы, но тогда
ВСЕ сообщения пойдут в этот файл. Так что лучше открыть
специальный поток для файла:
Код:
	#include <fstream>
...
ofstream file_out (filename);
...
file_out<< "текст" <<setiosflags( ios::fixed )
<<setprecision( 3 )<< 3.456564 << endl;
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-07-2007 14:57 » 

Q:
Какую функцию нужно использовать для генерации случайных
чисел от 0 до 1?

A:
Код:
	#include <climits>
...
double betweenZeroAndOne = double(rand()) / double(INT_MAX);
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 07-07-2007 14:58 » 

Q:
почему не получается присвоить строку, например я пишу:

Код:
	char mess[]="";
...
mess="мой текст";//задаю значение строки
MessageBox(hwnd, mess,"Error Message",MB_OK);
   
MessageBox не выводит ничего  - в чем ошибка?

A:
Массив mess объявлен как
   char mess[]="";

то есть всё равно что
   char mess[1]='\0';

размер массива равен единице, первый элемент равен 0.

Чтобы присвоить строку, нужно увеличить размер массива
(см. пример) и использовать strcpy для копирования
содержимого "мой текст" в mess :
Код:
	char mess[100];
mess[0]=0;//инициализация
...
strcpy(mess, "мой текст");

Либо использовать std::string (стандартный класс работы
со строками в C++).
« Последнее редактирование: 08-12-2007 15:16 от Алексей1153++ » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 07-07-2007 15:00 » 

Q:
как обратиться к переменной или методу базового класса?


A:
если не вдаваться в права доступа (public,private,protected),
то так
<имя_базового_класса>::переменная;
<имя_базового_класса>::метод();

пример:
Код:
class Cbase
{
protected:
int metod()
{
return 1;
}
};

class Cchild:public Cbase
{
int metod()
{
return 5;
}

void example()
{
int n;

//вызов Cchild::metod()
n=metod();

//вызов Cbase::metod()
n=Cbase::metod();
}
};
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 07-07-2007 15:01 » 


Q:
Стандартный генератор псевдослучайных чисел.

A:

Алгоритм генератора псевдослучайных чисел, который поставляется вместе с стандартными библиотеками С
Код:
#define RAND_MAX 32767

unsigned long next=1;

int rand(void) {
 next=next*1103515245+12345;
 return((unsigned int)(next/65536)%32768);
}

void srand(unsigned int seed) {
 next=seed;
}
Источник: http://algolist.manual.ru/maths/generator/standard.php
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 07-07-2007 15:01 » 

Q:
как проинициализировать статический мембер класса:


A:
Код:
class A
{
const static int m_n;
const static int m_Arr[];
};

const int A::m_n=0;
const int A::m_Arr[] ={1, 2, 5, 10, 20};
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 07-07-2007 15:02 » 

Q:   Как задать значение константы в двоичном представлении
(т.е. единицами и нулями в виде битового поля)?


A:

можно использовать макросы, например
Код:
//МАКРОСЫ ДЛЯ ДВОИЧНЫХ ЧИСЕЛ

//байт
#define _b8(b) ((BYTE)(\
(b&0x10000000?0x80:0)|(b&0x01000000?0x40:0)|\
(b&0x00100000?0x20:0)|(b&0x00010000?0x10:0)|\
(b&0x00001000?0x08:0)|(b&0x00000100?0x04:0)|\
(b&0x00000010?0x02:0)|(b&0x00000001?0x01:0)))
//слово
#define __b16(b16) ((WORD)((_b8(((unsigned __int64)b16)>>32)<<8)|(_b8(b16))))
//двойное слово
#define __b32(b16H,b16L) ((DWORD)(((__b16(b16H))<<16)|(__b16(b16L))))



//пример:
BYTE by;
by=_b8(0x01010110);// ==0x56
by=_b8(0x111);// ==7

WORD w;
w=__b16(0x0111011011010011);//==0x76d3

DWORD dwd;
dwd=__b32(0x0101010110110011,0x0101111011010001);//==0x55B35ED1
dwd=__b32(0x1000101110101010,0x11010101);//==0x8BAA00D5
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 07-07-2007 15:02 » 

Q:   Как можно число, представленное в символьном виде, получить (или преобразовать) в виде целочисленного типа данных? И как представить число в виде массива символов (строки)?
(например CString -> int  и  int -> CString)


A:

Код:
CString txt;
int n;
...
txt="1234";
n=atoi(txt); //CString -> int
...
n=1234;
txt.Format("%d",n);//  int -> CString
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines