Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)

1
24 ноября 2007 года
kot_
7.3K / / 20.01.2000
Эта тема предназначена для вопросов начинающих в программировании. Если вы только начинаете программировать и столкнулись с тем, что ваш HelloWord (как вариант - новая суперОС) - не компилируется по непонятной причине, хотя код вы один в один взяли из книжки (интернета, придумали сами), то скорей всего ваш вопрос НУЖНО размещать только в этой теме. Перед тем как его создать - обязательно воспользоваться поиском. Только в этой теме вы не рискуете нарваться на - RTFM, иди в ЧАВО, иди в гугль и в конце концов просто иди на ... - при условии конечно что в данной теме вопрос не задавался. Или если вы не задаете вопрос типа "расскажите мне подробно что такое шаблоны в С++" - т.е. вопрос, в ответ на который проще послать в вышеуказанное. Если же вы решили что, ваш вопрос настолько нов и свеж что никто до этого не спрашивал на форуме "как мне прочесть файл с использованием потока" и создали отдельную тему - не обессудьте - в лучшем случае тема будет закрыта, в худшем удалена - и вы получите нарушение.
Страницы:
9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Наворотил ты тут. Налицо - абсолютное незнание основ ООП.
Чтение из файла и разбиение на целую и дробную части можно организовать так:
[SIZE="1"](подразумевается, что формат входного файла следующий: )[/SIZE]
[quote=in.txt]
123124451451451.134514715612
5223452342345235.423424123123
2342342341133.243422342342
[/quote]
Вариант:
Код:
#include <string>
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream in( "in.txt" );
    if (!in.is_open())
    return -1;

    while (!in.eof())
    {
    string bignum;
    in >> bignum;

    string::size_type indexDot = bignum.find( '.' );
    if ( string::npos == indexDot )
        continue;

    string mainpart = bignum.substr( 0, indexDot++ );
    string mantissa = bignum.substr( indexDot );

    cout << mainpart << '.' << mantissa << endl;

    // тут преобразовывай и выкидывай в какой-нить контейнер
    }

    in.close();

    // тут сохраняй из контейнера

    return 0;  
}
47K
25 мая 2009 года
lifeinlags
17 / / 14.05.2009
спасибо большое,
но мне надо было считывать именно в массив
тоесть что-то похожее на то что написал я...
и классы тоже должны хоть как-нибудь использоваться
хоть как-нибудь я их и использовал =)))
Цитата: Lerkin
Наворотил ты тут. Налицо - абсолютное незнание основ ООП.

ещё только учусь, начинаю точнее даже учиться..


ещё неочень ясен рядок в твоём коде там где continue - разве он обязателен??

9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: lifeinlags
спасибо большое,
но мне надо было считывать именно в массив
тоесть что-то похожее на то что написал я...
и классы тоже должны хоть как-нибудь использоваться
хоть как-нибудь я их и использовал =)))


Классы можешь кие-нить ввести для преобразованных чисел.

Цитата: lifeinlags

ещё только учусь, начинаю точнее даже учиться..


Это хорошо. :)

А вместо массива используй контейнер:

Код:
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream in( "in.txt" );
    if (!in.is_open())
    return -1;

    typedef vector< pair<string, string> > BinArray;
    BinArray myArray;

    while (!in.eof())
    {
    string n;
    in >> n;

    string::size_type indexDot = n.find( '.' );
    if ( string::npos == indexDot )
        continue;

    string m1 = n.substr( 0, indexDot++ );
    string m2 = n.substr( indexDot ));
    myArray.push_back( make_pair(m1, m2) );
    }

    in.close();

    // --- Для просмотра контейнера ---
    typedef BinArray::const_iterator ba_cIter;
    for (ba_cIter it = myArray.begin(); it != myArray.end(); it++)
    cout << it->first << '.' << it->second << endl;

    return 0;  
}

Цитата: lifeinlags

ещё неочень ясен рядок в твоём коде там где continue - разве он обязателен??


А это если попадается число без дробной части.

47K
25 мая 2009 года
lifeinlags
17 / / 14.05.2009
Цитата: Lerkin
Классы можешь кие-нить ввести для преобразованных чисел.



я так думал что у меня всё будет в одном классе

крео у меня не особо, назвал его binary ))
так мыслю, что там у меня будет 4 функции:
считывание, вывод, перевод целой и перевод дробной части числа в двоичный код


Цитата: Lerkin

А вместо массива используй контейнер:



ну учусь я ещё))
контейнер эт что??
так понял что это vector..
пока ещё не изучал..
как изучу буду использовать ))

но в любом случае мне надо считывать в массив.
я считывал в символьный массив,
разбивал его на две части: целую и дробную.
и сохранял в разных массивах (mainpart и mantissa)
ну и ещё я передавал индекс последнего элемента

вроде всё более-менее логично...
но не компилируеццо
собственно и вопрос мой был:
"где ошибки?"

хочу поблагодарить за то, что ты мне подаешь мне всё на блюдечке, тратишь своё время пишешь мне код. но, сорри, условие у меня "использовать массив" - я кагбэ использовал.
если какие-то моменты есть в моём коде которые уж слишком режут глаза то конечно было бы очень неплохо копипастить их

9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: lifeinlags
я так думал что у меня всё будет в одном классе
крео у меня не особо, назвал его binary ))
так мыслю, что там у меня будет 4 функции:
считывание, вывод, перевод целой и перевод дробной части числа в двоичный код


Не усложняй. Все решается проще. Хотя, если в целях изучения языка...

Цитата: lifeinlags

контейнер эт что??
динамический массив??


Еще круче. :)

Цитата: lifeinlags

но в любом случае мне надо считывать в массив.
я считывал в символьный массив,
разбивал его на две части: целую и дробную.
и сохранял в разных массивах (mainpart и mantissa)
ну и ещё я передавал индекс последнего элемента


Присмотрись внимательно к своему коду. Тебе самому он нравится? ;)

9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: lifeinlags

вроде всё более-менее логично...
но не компилируеццо
собственно и вопрос мой был:
"где ошибки?"


Как говорят коллеги-медики: "Ушиб всей бабушки" :) Там весь код неправильный.

47K
25 мая 2009 года
lifeinlags
17 / / 14.05.2009
ну например?
конечно можно было бы и немного подругому считывать,но
разве совсем я что-то резко неправильное сделал??
ну считал в массив чаров, ну разбил на две части записал в массивы интов и
потом вывел
в чём ошибка?
сейчас мне бы хотелось чтобы ты правильно меня понял:
я не оправдываюсь, просто где я наошибался хочу услышать))
9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: lifeinlags

в чём ошибка?
сейчас мне бы хотелось чтобы ты правильно меня понял:
я не оправдываюсь, просто где я наошибался хочу услышать))


Ок, оставим способ решения в стороне.
Самое первое:

 
Код:
...
   binary num;
    num.indMPRT=0;
    num.indMNTS=0;
    //(ниже) вызываем ф-ю считывания из файла числа
    binary::in_num(num.mainpart, num.indMPRT, num.mantissa, num.indMNTS);
...

Зачем вызываешь нестатичную функцию для тобой же созданного объекта, который её инкапсулирует, да еще и передаёшь ей в аргументах ссылки на члены-данные, к которым она и так имеет доступ?

Ну, и дальше:
 
Код:
//(ниже) вызываем ф-ю вывода на экран числа
    binary::out_num(num.mainpart, num.indMPRT, num.mantissa, num.indMNTS);

Опять фигня.

 
Код:
// (ниже) идёт проверка на точку
        if ((c==48) || (c==49) || (c==50) || (c==51)
         || (c==52) || (c==53) || (c==54) || (c==55)
         || (c==56) || (c==57)) i++;
        else break;

Это не проверка на точку, эта проверка на цифру.

 
Код:
...
    for (int k=0; k<=i; k++)
    {
        a1[k]=c[k];  // неявное преобразование
        a1[k]=(a1[k]-48);
    };

Ну а потом, чтение а твоем примере возможно только одного числа.

А это "чей туфля"?
Код:
void out_num (int ar1[], int z1, int ar2[], int z2)
{
     for (int g1=0; g1<=z1; g1++)
     {
         cout<<ar1[g1];
     };
     for (int g2=0; g2<=z1; g2++)
     {
         cout<<"."<<ar2[g2];
     }
// вывели значение ввиде:
// [элементы первого массива без пропусков].[элементы второго массива без пропусков]
     cout<<endl;
     system("pause");
     exit(0);
}

1. Уверен, что на экран попадет то, что нужно? (подсказка: твои индексы - это фигня)
2. Преждевременный выход в систему? Круто...

Извиняй, но дальше копаться сил и желания нету...
47K
25 мая 2009 года
lifeinlags
17 / / 14.05.2009
тоесть можно было бы и записать так??
 
Код:
binary::in_num();
9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: lifeinlags
тоесть можно было бы и записать так??
 
Код:
binary::in_num();


Да нет, блин. Тебе даже компилятор подсказывал...

 
Код:
num.in_num();
47K
25 мая 2009 года
lifeinlags
17 / / 14.05.2009
ааа
спасибо))
ещё где глаза режет? )) подскажи пож. если не сложно
9
25 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: lifeinlags
ааа
спасибо))
ещё где глаза режет? )) подскажи пож. если не сложно



Я же здесь расписал.

50K
25 мая 2009 года
ser-gapon
1 / / 25.05.2009
привет!люди,помогите решить задачу:
для формулы нужно сделать:
1. Точечный просчет. Должна быть обеспечена возможность установки значения для любого параметра задачи (х и а), после чего рассчитывается и выводится на экран значение, требуемое по условию индивидуального варианта задания.
2. Просчет в диапазонном режиме. Должна быть обеспечена возможность установки значения для параметра а. Для аргумента х задаются его наименьшее и наибольшее значения. В результате х должен изменяться в заданном диапазоне значений для максимально возможного количества точек. В результате выполняется расчет и вывод на экран номеров точек, значений аргумента х и соответствующие значения функции. Результаты представляются на экране в виде таблицы, имеющей 2 колонки.

Если какое-то сочетание параметров является недопустимым (полюс функции или, например, отрицательное подкоренное значение), то в точечном режиме додлжно быть выведено сообщение об этом, а в диапазонном – в таблице вместо значения функции размещается соответствующее сообщение.

формула: сигма(i от 0 до 10) дроби,в числителе квадратный корень из:2+a+ix.в знаменатиле:sin(ix+a)

вот что я придумал к первой части:
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{
int i,a,x;
double s,y,z;
cout<<"vvedite a:"<<endl;
cin>> a;
cout<<"vvedite x"<<endl;
cin>>x;
for (i=0;i<=10;i++)
{
if((2+a+x*i)>0)
{
y=sqrt(2+a+x*i);
}
else
{
cout<<"pri I ravnom "<<i<<" koren otricatilen";
break;
}
if(sin(x*i+a)!=0)
{
z=sin(x*i+a);
}
else
{
cout<<"pri I ravnom "<<i<<" znamenatel raven 0";
break;
}
s=(y/z);
cout<<"pri I ravnom "<<i<<" zna4enie s="<<s<<endl;
}
}


но,если ставить брейки,то возможно,что при изменении I получится отриацателен корень или знаменатель равен 0,но при дальнейшем изменении i решение будит,а без брейка выходит какой-то левый ответ,че делать?помогите!
50K
27 мая 2009 года
Mike89
4 / / 27.05.2009
Люди, помогите, пожалуйста!
Задание элементарное, но из-за нехватки теоретических знаний его сделать не могу :(

Дана квадратная матрица размером NxN, содержащая вещественные числа.

Определить сумму элементов в каждой строке матрицы и упорядочить номе-

ра строк по убыванию значений найденных сумм с помощью алгоритма сор-

тировки выбором. Вывести упорядоченный список номеров строк и соответ-

ствующих им сумм.




Насколько я понимаю, сортировка матрицы:


#include <stdio.h>
int main(){
int a[8]={10,5,-2,7,-1,4,0,3};
for(int i=0; i<8; i++) printf("%i ", a); printf("\n");
for(i = 1; i <= 8; i++)
{
int tmp = a[i-1];
int k = i;
for(int j = i; j <= 8; j++)
{
if(tmp > a[j-1])
{
tmp = a[j-1];
k = j;
}
}
a[k-1] = a[i-1];
a[i-1] = tmp;
}
for(i=0; i<8; i++) printf("%i ", a); printf("\n");
return 0;
}
не компилируется, не нравятся 4 и 5 строчка.. я подозреваю, что переменные нужно описывать... Подскажите, пожалуйста, как сделать...
18K
27 мая 2009 года
s-ilent
58 / / 30.09.2008
Цитата: Mike89
Люди, помогите, пожалуйста!
Задание элементарное, но из-за нехватки теоретических знаний его сделать не могу :(

Дана квадратная матрица размером NxN, содержащая вещественные числа.

Определить сумму элементов в каждой строке матрицы и упорядочить номе-

ра строк по убыванию значений найденных сумм с помощью алгоритма сор-

тировки выбором. Вывести упорядоченный список номеров строк и соответ-

ствующих им сумм.




Насколько я понимаю, сортировка матрицы:


#include <stdio.h>
int main(){
int a[8]={10,5,-2,7,-1,4,0,3};
for(int i=0; i<8; i++) printf("%i ", a); printf("\n");
for(i = 1; i <= 8; i++)
{
int tmp = a[i-1];
int k = i;
for(int j = i; j <= 8; j++)
{
if(tmp > a[j-1])
{
tmp = a[j-1];
k = j;
}
}
a[k-1] = a[i-1];
a[i-1] = tmp;
}
for(i=0; i<8; i++) printf("%i ", a); printf("\n");
return 0;
}
не компилируется, не нравятся 4 и 5 строчка.. я подозреваю, что переменные нужно описывать... Подскажите, пожалуйста, как сделать...



Для начала я не могу понять, где у Вас матрица NxN.
Вот мой вариант программы. Сделан на скорую руку, поэтому не идеален.
Доработаете сами.

Код:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#define N 4
//---------------------------------------------------------------------------

int main()
{
int mas[N][N] = {8, 5, 7, 4,
                 4, 0, 4, 1,
                 9, 4, 7, 4,
                 3, 2, 9, 8};
int sum[N], num[N] = {1, 2, 3, 4};
int i, j, k, min, temp;

    for(i = 0; i < N; i++) {
        printf("%d\t", num);
        for(j = 0; j < N; j++) printf("%4d", mas[j]);
        printf("\n");
    }
    printf("\n\n");

    for(i = 0; i < N; i++) {
        sum = 0;
        for(j = 0; j < N; j++)
            sum += mas[j];
    }

    for(i = 0; i < (N - 1); i++) {
        min = i;
        for(j = i + 1; j < N; j++) {
            if(sum[j] < sum[min]) min = j;
        }
        temp = sum;
        sum = sum[min];
        sum[min] = temp;

        for(k = 0; k < N; k++) {
            temp = mas[k];
            mas[k] = mas[min][k];
            mas[min][k] = temp;
        }
        temp = num;
        num = num[min];
        num[min] = temp;
    }

    for(i = 0; i < N; i++) {
        printf("%d\t", num);
        for(j = 0; j < N; j++) printf("%4d", mas[j]);
        printf("\n");
    }

    getch();

    return 0;
}
//---------------------------------------------------------------------------
50K
27 мая 2009 года
Mike89
4 / / 27.05.2009
спасибо огромное!
50K
28 мая 2009 года
Olga_86
1 / / 15.05.2009
Здравствуйте, я начинающая. Пишу не сложный текстовый редактор на C#. При реализации надстрочного шрифта,столкнулась со следующей проблемой. При нажатии на кнопку, шрифт сдвигается вверх,а при втором нажатии смещение отменяется.Подскажите,пожалуйста,как правильно уменьшить надстрочный шрифт,чтобы при втором нажатии на кнопку сохранялся стиль и размер обычного шрифта.Заранее премного благодарна!
private void надстрочныйStripButton1_Click(object sender, EventArgs e)
{
if (Math.Abs(richText.SelectionCharOffset) != 0)
{
richText.SelectionCharOffset = 0;
}
else
{
richText.SelectionCharOffset = 6;
}
}
50K
28 мая 2009 года
KocmoC11
3 / / 22.05.2009
Подскажите пожалуйсто в чем же дело... я пробовал с операторам new тоже как то не очень:(
Код:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
typedef struct
       {
        char fam [40];
        char nam [40];
        char otch [40];
        char dol [40];
        char date [10];
        float zp;
        }EMPLOYEE;
EMPLOYEE cadd(int n)
{  EMPLOYEE mass[n];
  //формируем запись sotr
   for(int i=0;i<=n;i++)
  { cout<<"fam="; cin>> mass.fam;
   cout<<"nam="; cin>> mass.nam;
   cout<<"otch="; cin>> mass.otch;
   cout<<"dol="; cin>> mass.dol;
   cout<<"date="; cin>> mass.date;
   cout<<"zp="; cin>> mass.zp;
   }
   return mass[n];
}
int main()
{ FILE *fp;

  int n=0;
  cin>>n;
  EMPLOYEE sotr[]=cadd(10);

  fp = fopen("file.txt","wb");
   if (fp==NULL)
                {
                 cout<<"Error opening file: "<<ferror(fp)<<'\n';
                 return 1;
                }
   fwrite(&sotr, sizeof(EMPLOYEE),1,fp);
   fclose(fp);

      system("PAUSE");
      return 0;
}

ругается вот на эту строчку
 
Код:
EMPLOYEE sotr[]=cadd(10);
что здесь не так не пойму делал по примеру
18K
28 мая 2009 года
s-ilent
58 / / 30.09.2008
Цитата: KocmoC11
Подскажите пожалуйсто в чем же дело... я пробовал с операторам new тоже как то не очень:(
Код:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
typedef struct
       {
        char fam [40];
        char nam [40];
        char otch [40];
        char dol [40];
        char date [10];
        float zp;
        }EMPLOYEE;
EMPLOYEE cadd(int n)
{  EMPLOYEE mass[n];
  //формируем запись sotr
   for(int i=0;i<=n;i++)
  { cout<<"fam="; cin>> mass.fam;
   cout<<"nam="; cin>> mass.nam;
   cout<<"otch="; cin>> mass.otch;
   cout<<"dol="; cin>> mass.dol;
   cout<<"date="; cin>> mass.date;
   cout<<"zp="; cin>> mass.zp;
   }
   return mass[n];
}
int main()
{ FILE *fp;

  int n=0;
  cin>>n;
  EMPLOYEE sotr[]=cadd(10);

  fp = fopen("file.txt","wb");
   if (fp==NULL)
                {
                 cout<<"Error opening file: "<<ferror(fp)<<'\n';
                 return 1;
                }
   fwrite(&sotr, sizeof(EMPLOYEE),1,fp);
   fclose(fp);

      system("PAUSE");
      return 0;
}

ругается вот на эту строчку
 
Код:
EMPLOYEE sotr[]=cadd(10);
что здесь не так не пойму делал по примеру



У Вас полностью неправильная логика формирования sotr. Функция EMPLOYEE cadd(int n) не вернет вам n значений. Вы используете структуру, поэтому используйте указатели.
Т.е вместо EMPLOYEE cadd(int n) - EMPLOYEE *cadd(int n).
Соответственно вместо sotr - *sotr. И *mass. А конструкция return mass[n] будет возвращать n - тый элемент, а не n элементов.

41K
28 мая 2009 года
phantomka
8 / / 22.09.2008
KocmoC11, а Вы уверены, что компилятор ругается только на эту строку?

Мой вам совет: возьмите любой учебник по С++ и внимательно почитайте тему "Массивы" :) Да и тему "Функции" не мешало бы :)

Если вы объявляете статический массив, то в [] указывается константное выражение, если динамический - то его объявление будет выглядеть примерно так для вашего случая:
 
Код:
EMPLOYEE *sotr = new EMPLOYEE[n];


Это первое. Второе, что бросилось мне в глаза: Вы хотите, чтобы функция cadd вернула одну структуру или массив структур?
На мой взгляд, проще было бы сделать так:
Код:
EMPLOYEE cadd()
{
    EMPLOYEE empl;

    cout<<"fam=";   cin>> empl.fam;
    cout<<"nam=";   cin>> empl.nam;
    cout<<"otch=";  cin>> empl.otch;
    cout<<"dol=";   cin>> empl.dol;
    cout<<"date=";  cin>> empl.date;
    cout<<"zp=";    cin>> empl.zp;

    return empl;
}

(функция возвращает структуру)
и вызывать эту функцию в цикле в main:
 
Код:
for(int i = 0; i < n; i ++)
      sotr = cadd();

Думаю, если вы поймете тему "Массивы", то и записать результаты в файл не составит особого труда ;)
47K
28 мая 2009 года
lifeinlags
17 / / 14.05.2009
я опять по поводу той проги с переводом чисел в двоичную систему исчесления с десятичной,
с использованием массивов.
написано конечно дико))
кое-как скомпилировалось
уже патыюсь найти ошибку часа три.
безрезультатно..
подскажите пожалуйста где там у ошибка в алгоритмах перевода.
Код:
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <binary.h>

using namespace std;

int main()
{
    binary num;
    num.in_num();
    num.num_mainpart_conv();
    num.num_mantissa_conv();
    return 0;
}

ну и binary.h где собственно и находиццо ошибка в каком-то из алгоритмов:
(был вывод в текстовый файл, навремя сделал в консольку. так пока проще)
Код:
// binary.h
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <iostream>

using namespace std;

class binary
{
      public:
// поскольку по условию работа будет с большими числами,
// то размер массивов целой и дробной части числа
// сделаем по 505 символов
// всего число сможет иметь максимально от 505 до 1010 цифр
// думаю должно хватить =)
             int mainpart[505];
             int convertedMPRT[2000];
             int INDconvertedMPRT;
             int mantissa[505];
             int convertedMNTS[2000];// тут сохраняется уже двоичный код дробной части
             int INDconvertedMNTS;// индекс последнего эл.
      //(ниже) индекс последнего элемента mainpart
             int indMPRT;
      // (ниже) индекс последнего элемента mantissa            
             int indMNTS;
             void in_num(); // ф-я считывания. записывает целую и дробную части числа в 2 массива:
                                    // mainpart и mantissa
             void divide_num(); // деление массива целой части числа на 2
             void num_mainpart_conv(); //ф-я перевода целой части, использует divide_num
             void mult_num(); // умножение массива целой части числа на 2.
                                         // сделано так, что только первый элемент может иметь две цифры
                                         // 1 цифра(десятки) это кагбэ если при умножении дроби 0.712 на 2 = 1.424
                                         // то нулевой элемент был бы 14 массива
                                         // первый соответственно 2 и т.д.
             void num_mantissa_conv(); //ф-я перевода дробной части числа записанного в массив
                                                         //использует ф-ю mult_num
};

void binary::in_num()
{
    ifstream in;
    in.open("in.txt");
    char c[510];
    int i=0;
    while (in)
    {
        in>>c;
    // (ниже) идёт проверка на не цифру (подразумевается что будет точка)
        if ((c==48) || (c==49) || (c==50) || (c==51)
         || (c==52) || (c==53) || (c==54) || (c==55)
         || (c==56) || (c==57)) i++;
        else break;
    };
    i--;
    indMPRT=i;
    for (int k=0; k<=i; k++)
    {
        mainpart[k]=c[k];
        mainpart[k]=(mainpart[k]-48);
    };
    int j=0;
    while (in)
    {
        in>>c[j];
        j++;
    };
    j=j--;
    indMNTS=j;
    for (int k=0; k<=j; k++)
    {
        mantissa[k]=c[k];
        mantissa[k]=(mantissa[k]-48);
    };
    in.close();
    return;
}


void binary::divide_num()
{
    int state=0;
    int ii=0;
    int del[505];
    int d=0;
    int p;
    convertedMPRT[INDconvertedMPRT]=mainpart[indMPRT]%2;
    while(ii<=indMPRT)
    {
        if ((mainpart[ii]==0) && (state==0))
        {
            del[d]=0;
            d++;
        }
        else
        {
            if ((mainpart[ii]==1) && (state==0) && (ii!=0))
            {
                state=1;
                del[d]=0;
                d++;
            }
            else
            {
                if ((mainpart[ii]==1) && (state==0) && (ii==0))
                {
                    state=1;
                }
                else
                {
                    if ((mainpart[ii]!=0) && (mainpart[ii]!=1) && (state==0))
                    {
                       p=mainpart[ii];
                       del[d]=p/2;
                       d++;
                       state=p%2;
                    }
                    else
                    {
                        if (state==1)
                        p=10+mainpart[ii];
                        del[d]=p/2;
                        d++;
                        state=p%2;
                    }
                }
            }
        };
    ii++;
    };
    ii--;
    d--;
    int hh;
    for(hh=0; hh<d; hh++)
    {
        mainpart[hh]=del[hh];
    };
    indMPRT=hh;
    return;
}

void binary::num_mainpart_conv()
{
    INDconvertedMPRT=1;
    while((indMPRT!=0) && (mainpart[0]>=2))
    {
        binary::divide_num();
        INDconvertedMPRT++;
    };
    INDconvertedMPRT--;
    convertedMPRT[0]=mainpart[0];
    ofstream out;
    out.open("out.txt");
    cout<<endl;
    for (int z=0; z<=INDconvertedMPRT; z++)
    {
        cout<<convertedMPRT[z];
    };
    out.close();
    return;
}

void binary::mult_num()
{
    int yy=0;
    for(yy=0; yy<=indMNTS; yy++)
    {
        mantissa[yy]=mantissa[yy]+mantissa[yy];
    };
    for(int yyy=indMNTS; yyy>=1; yyy--)
    {
        if (mantissa[yyy]>9)
        {
            mantissa[(yyy-1)]=mantissa[yyy]/10;
            mantissa[yyy]=mantissa[yyy]%10;
        };
    };
    yy--;
    while (mantissa[yy]==0)
    {
        indMNTS--;
        yy--;
    };
}

void binary::num_mantissa_conv()
{
    int r=0;
    ofstream out;
    out.open("out.txt");
    cout<<".";
    int period[505][400];
    for(int l=0; l<indMNTS; l++)
    {
         period[0][l]=mantissa[l];
    };
    int e1=0;
    while(true)
    {
        binary::mult_num();
        convertedMNTS[r]=mantissa[0]/10;
        mantissa[0]=mantissa[0]%10;
        for(int uu=0; uu<=e1; uu++)
        {
            for(int uuu=0; uuu<indMNTS; uuu++)
            {
                if (period[uu][uuu]==mantissa[indMNTS])
                {
                    for(int q=0; q<uu; q++)
                    {
                        cout<<convertedMNTS[uu];
                    };
                    cout<<"(";
                    for(int qq=uuu; qq<=indMNTS; qq++)
                    {
                        cout<<convertedMNTS[qq];
                    };
                    cout<<")"<<endl;
                    out.close();
                    cout<<endl;
                    system("pause");
                    exit(0);
                };
            };
        };
        for(int gg=0; gg<=indMNTS; gg++)
        {
            if (mantissa[gg]!=0) break;
            if (gg==indMNTS)
            {
                for(int hhh=0; hhh<r; hhh++)
                {
                    cout<<convertedMNTS[hhh];
                };
                out.close();
                cout<<endl;
                system("pause");
                exit(0);
            };
        };
        if (r==400)
        {
            for(int bb=0; bb<=r; bb++)
            {
                cout<<convertedMNTS[bb];
            };
            cout<<endl;
            system("pause");
            exit(0);
        };
        r++;
    };
}
18K
29 мая 2009 года
cpPLover
25 / / 30.11.2006
Добрый день. Подскажите пожалуйста мне.
Мне нужно узнавать полные адреса файлов перетаскиваемых на окно программы.
Я нашел в FAQ статейку по этому поводу, но не смог в ней разобраться.

Пишут вот что:
1. Добавить стиль приема фалов к стилю элемента управления или окна
 
Код:
DWORD dwStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
SetWindowLong(hWnd, GWL_EXSTYLE, dwStyle | WS_EX_ACCEPTFILES);


С этой частью разобрался.

2.В оконной процедуре определить обработчик события WM_DROPFILES
Код:
char tmp[256];
 case WM_DROPFILES:
  HDROP hDrop = (HDROP)wParam;
  DWORD DropsNo = DragQueryFile(hDrop, -1, NULL, 0);

  for (DWORD i = 0; i < DropsNo; i++)
  {
   DragQueryFile(hDrop, i, tmp, 256);
   MessageBox(NULL, tmp, "", MB_OK); // Что ни будь делаем с данными...
  }
  DragFinish(hDrop);
 return(0);


Половину понял но реализовать не могу.
Непонял как работает WM_DROPFILES и
что это за выражение HDROP hDrop = (HDROP)wParam; ?

Буду признателен если поможите понять.
7
29 мая 2009 года
@pixo $oft
3.4K / / 20.09.2006
1.Стиль определяется константой WS_Ex_AcceptFiles.Добавляется он к старому стилю окна(который уже есть) с помощью логической операции ИЛИ(символ "|").Таким образом,ты позволишь окну работать на приём перетаскиваемых файлов
2.Оконная процедура находится в коде твоей программы,и звать её обычно WndProc(а вообще–по желанию).Она уравляет всеми действиями над окном(обрабатывает сообщения)–создание,отображение,перерисовка и мн. др.
3.case WM_DropFiles объявленно без switch потому что,видимо,это сделано в программе,а это просто кусок кода,который туда надо вставить.Т.е. подразумевается,что switch написан где-то выше в коде оконной процедуры
4.Выражение HDROP hDrop=(HDROP)wParam означает создание новой переменной типа HDROP и присвоение её значения,переданного в качестве параметра wParam.Почему перед ним стоит (HDROP),спросишь ты?А потому что надо присвоить значение одного типа значению другого типа,только и всего.Typecast,если я не ошибаюсь,да поправят меня знатоки:)
5.Это подразумевается куском функции(см. выше).Это означает,что обработчик сообщения WM_DropFiles отработал нормально

Для общего развития прочитай что-нибудь про Windows API,в частности,про окна и всё,что с ними связано.И изучай C/C++(что ты там изучаешь)
50K
30 мая 2009 года
Mike89
4 / / 27.05.2009
Помогите, пожалуйста, со структурами...
задание:
Дан список, содержащий 10 записей, каждая из которых имеет структуру:

Шифр книги Ф.И.О. авторов Название Год издания

тип строка тип строка тип строка целое

5 символов 20 символов 15 символов

Список упорядочен по возрастанию года издания. Разработать алгоритмы и

программы линейного и двоичного поиска всех книг, изданных до 1960 год с

выводом найденных записей на экран.


Обьясните, пожалуйста, как это можно сделать, насколько я понимаю:

addr data_list[] = { {“1elem”, “2el”, “3el”, 42},
{“adf12”, “asdf”, “asdf”, 34},
{“asdf”, “ared”, “sadf”, 342}
};

это описание массива структур...
далее, бинарный поиск:

int main()
{
int a[8]={-2,0,1,5,7,10,15,20};
int x = 14; // элемент который будем искать
int k, i=0, j=7;
bool b=false;
do
{
k=(i+j) / 2;
if(a[k] == x) b=true; else if(a[k] < x) i=k+1; else j=k-1;
} while(!(b || i>j));
if(b) printf("Интересующий Вас элемент найден;\nвпервые он встречается в массиве\nпод номером %i\n", k);
else printf("Интересующий Вас элемент не найден!\n");
return 0;
}

Линейный поиск нашёл на форуме -

#pragma warn -rpt
#include<stdio.h>
#include<stdlib.h>

int compare(int *x,int *y)
{
return(*x-*y);
}
int main(void)
{
int array[5] = {35,87,46,99,12};
int key;
int *result;
key = 99;
result = lfind(&key,array,5,sizeof(int),compare);
if(result)
printf("Число %d найдено",key);
else
printf("Число %d ненайдено",key);
return 0;
}


Помогите, пожалуйста, собрать в одну программу, сам не справился :(
50K
31 мая 2009 года
Stazher
2 / / 31.05.2009
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
const n=3;
struct student
{
 char fio[20];
 char pol[3];
 int stp[30];
};
student gr[n];
 int i;
int main()
{
 ifstream input("input.txt");
 ofstream output("output.txt");
   for(i=0;i<n;i++)
   input>>gr.fio>>gr.pol>>gr.stp;
   output<<("Девушки получающие повышенную стипендию:\n");
     for(i=0;i<n;i++)
     if ((gr.stp > 1100) && (!strcmp(gr.pol,"z")))
     output<<gr.fio<<"\n";
input.close();
output.close();
getch();
return 0;
}

При компилляции выводит две ошибки:
1)illegal structure operation
2)cannot convert 'int' to 'int*'
Помогите, пожалуйста, как надо исправить.
50K
31 мая 2009 года
Stazher
2 / / 31.05.2009
Все понял в чем проблема.
50K
03 июня 2009 года
Mike89
4 / / 27.05.2009
Цитата: Mike89
Помогите, пожалуйста, со структурами...
задание:
Дан список, содержащий 10 записей, каждая из которых имеет структуру:

Шифр книги Ф.И.О. авторов Название Год издания

тип строка тип строка тип строка целое

5 символов 20 символов 15 символов

Список упорядочен по возрастанию года издания. Разработать алгоритмы и

программы линейного и двоичного поиска всех книг, изданных до 1960 год с

выводом найденных записей на экран.


Обьясните, пожалуйста, как это можно сделать, насколько я понимаю:

addr data_list[] = { {“1elem”, “2el”, “3el”, 42},
{“adf12”, “asdf”, “asdf”, 34},
{“asdf”, “ared”, “sadf”, 342}
};

это описание массива структур...
далее, бинарный поиск:

int main()
{
int a[8]={-2,0,1,5,7,10,15,20};
int x = 14; // элемент который будем искать
int k, i=0, j=7;
bool b=false;
do
{
k=(i+j) / 2;
if(a[k] == x) b=true; else if(a[k] < x) i=k+1; else j=k-1;
} while(!(b || i>j));
if(b) printf("Интересующий Вас элемент найден;\nвпервые он встречается в массиве\nпод номером %i\n", k);
else printf("Интересующий Вас элемент не найден!\n");
return 0;
}

Линейный поиск нашёл на форуме -

#pragma warn -rpt
#include<stdio.h>
#include<stdlib.h>

int compare(int *x,int *y)
{
return(*x-*y);
}
int main(void)
{
int array[5] = {35,87,46,99,12};
int key;
int *result;
key = 99;
result = lfind(&key,array,5,sizeof(int),compare);
if(result)
printf("Число %d найдено",key);
else
printf("Число %d ненайдено",key);
return 0;
}




Помогите, пожалуйста, собрать в одну программу. Очень надо.

41K
06 июня 2009 года
BurningMan
2 / / 19.07.2008
Код:
#include <iostream>
#include <fstream>
#include <string>
#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")

using namespace std;


int main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(2, 2);
    int s=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN sin;
    sin.sin_family=AF_INET;
    sin.sin_port=htons(3456);
    WSAStartup(wVersionRequested, &wsaData);
    PHOSTENT phe=gethostbyname("localhost");
    memcpy((char FAR *)&(sin.sin_addr ),
        phe->h_addr_list , phe->h_length);
    int con=connect(s,(struct sockaddr *)&sin,sizeof(&sin));
    cout<<con<<endl;
    cout<<WSAGetLastError()<<endl;
    WSACleanup();
   
       
}


при попытке исполнения этого кода WSAGetLastError() выдаёт ошибку 10038. Подскажите как решить эту проблему, пожалуйста.
7
06 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Читаем код ошибки:"Сделана попытка выполнить операцию на объекте,не являющемся сокетом"
Возможно,где-то ошибки в коде–точно сказать не могу.Убедитесь,что инициализация проходит успешно(ну,может,нет у вас версии 2.2)
47K
09 июня 2009 года
MishevskiyAlex
4 / / 03.04.2009
Подскажите как преобразовать данные введённые с помощью Edit/MaskEdit, имеющие тип AnsiString в тип double.
Если не трудно фрагментиком кода?
50K
09 июня 2009 года
billibons
2 / / 05.06.2009
Добрый вечер.
Что в этой программе может быть неправильным?
Код:
#include<conio.h>
#include<iostream>     
int main(int argc, char* argv[])
{
    cout << "Enter the string: ";
    char* string = new char [];
    cin >> string;
    int c=0;
    while(*string != '\0')
    {
        if (*string == '1'){c++;}
        string++;
    }
    cout<<'\n'<<c;
        getchar();
}


Прикол в том, что она работает через раз. Бывает работает, а бывает вылетает с ошибкой (ну вот с той, что хочет отправить отчет Микрософту). Вобщем ведет себя безобразно. Что это может быть?
3
10 июня 2009 года
Green
4.8K / / 20.01.2000
Цитата: billibons
Добрый вечер.
Что в этой программе может быть неправильным?


А что по-твоему делает строчка?

 
Код:
char* string = new char [];
50K
10 июня 2009 года
billibons
2 / / 05.06.2009
Вроде объявляет строку.
Если так не правильно, то как мне объявить строку, если я заранее не знаю ее размер?
14
10 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: BurningMan

при попытке исполнения этого кода WSAGetLastError() выдаёт ошибку 10038. Подскажите как решить эту проблему, пожалуйста.


а вот и ошибочка: (думаю сами догоните?)

 
Код:
...
    int s=socket(AF_INET,SOCK_STREAM,0);
...
    WSAStartup(wVersionRequested, &wsaData);
...
50K
10 июня 2009 года
noobie
1 / / 10.06.2009
 
Код:
inline dVector& dMatrix::operator[] (int  i)
{
    return (&m_front);
}

inline const dVector& dMatrix::operator[] (int  i) const
{
    return (&m_front);
}

Какой смысл делать вариант с const и в каких случаях он будет использоваться?
3
10 июня 2009 года
Green
4.8K / / 20.01.2000
Цитата: billibons
Вроде объявляет строку.
Если так не правильно, то как мне объявить строку, если я заранее не знаю ее размер?


Ну а как ты собираешься выделить область памяти, если не знаешь размер?

Варианта как минимум три:
1) узнать размер,
2) выделить заведомо больше, чем может понадобиться,
3) выделить некоторое кол-во, например, один байт, как заполниться выделить ещё, например еще один байт и т.д.

Выбирай любой, но учти, что правильный - третий, например с помощью класса string.

И учи C++ (по книгам, а не методом тыка).

288
10 июня 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: noobie
 
Код:
inline dVector& dMatrix::operator[] (int  i)
{
    return (&m_front);
}

inline const dVector& dMatrix::operator[] (int  i) const
{
    return (&m_front);
}

Какой смысл делать вариант с const и в каких случаях он будет использоваться?



Например для того, чтобы использовать оператор для константных объектов.

50K
14 июня 2009 года
uttesedug
3 / / 13.06.2009
.g текст код, .ge байт код. Отличается тем что в байт коде синтаксис программы уже разобран так как удобно виртуальной машине. Виндоза тут не причем, ей и так хорошо и вкусно.
7
14 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Эммм…может,я что-то не понимаю,но при чём тут байт-код?

P.S.Простите за оффтоп
3
14 июня 2009 года
Green
4.8K / / 20.01.2000
Цитата: @pixo $oft
Эммм…может,я что-то не понимаю,но при чём тут байт-код?

P.S.Простите за оффтоп



Это бот. Заблокировал.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог