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

Ваш аккаунт

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

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

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

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

51K
05 июля 2009 года
Олориин
1 / / 05.07.2009
День добрый вопрос такой: в ListBox создал 3 столбца
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?

1636 ответов / показаны 1481 - 1519

Страницы:
7
14 ноября 2011 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: l2qwe
Создаю форму и устанавливаю
IsMdiContainer = true;
Помещаю по центру Label с определенным текстом, ставлю чтоб он всегда был по центру.
Но когда создаю форму (MDIChild) она оказывается позади Label, как мне сделать так что бы Label был всегда позади открытых VDIChild'ов

В визуальном дизайнере должно быть меню изменения Z-order'а.Отправь Label в самый зад:)

77K
15 ноября 2011 года
Devil7
2 / / 15.11.2011
Удалить из массива M(25) все элементы, значения которых в этом массиве повторяются, оставить по одному. Элементы массива задать рандомно. Есть шаблон по которому это можно сделать или как это вообще сделать?
77K
15 ноября 2011 года
Devil7
2 / / 15.11.2011
Сформировать новый массив из положительных нечетных элементов заданного массива Р (20). Использую генератор случайных чисел.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 20

int main()
{
int i;
int m[N];
srand(time(NULL));
printf("m: ");
for(i = 0; i < N; i++)
{
m = rand()%100+1;
printf("%i ",m);
}
//Нахождение элементов массива m, у которых остаток от деления на 2 не равняется 0//
for(i=0;i<N;i++)
{
if (m%2!=0&&m>0)
k+=1;
printf("%d",k);
}
//Формируем новый массив из нечетных элементов k//
int p[K];
for (i=1;i<K;i++)
{
if (m%2!=0,m>0)
{
p[K]=m;
K+=1;}
for(i = 0; i < K; i++)
printf("p: ");
}
return 0;
}
69K
15 ноября 2011 года
l2qwe
13 / / 27.09.2011
Цитата: @pixo $oft
В визуальном дизайнере должно быть меню изменения Z-order'а.Отправь Label в самый зад:)



Спасибо за ответ, поискал информацию в этом направление.
На msdn нашел такую информацию:

Цитата:
Метод ZOrder более не существует в Visual Basic 2008. Во время конструирования можно использовать команду На передний план или На задний план меню Формат; во время выполнения можно использовать функцию BringToFront или SendToBack.


Соответственно для C# так же необходимо использовать эти 2 функции.
Попробовал, label1.SendToBack(), и мой лабел ушел по Z порядку ниже чем контрол MdiClient.
Получается что я не могу установить Z порядок внутри MdiClient для не помещенных туда контролов, а лабел поместит туда нельзя.

Решил следующим образом:
создал еще 1 форму
поместил на нее мои label'ы
у формы установил свойство FormBorderStyle = None
при создание основной формы с MdiClient контролом та же создаю форму с label'ами
и что бы на эту форму не переходил фокус установил свойство Enabled = false;

9.7K
17 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: Настен
Скорее пример на С++(можно и идею):)


http://lib.ru/CPPHB/cpptut.txt
Раздел: "1.2.5 Объектно-ориентированное программирование"
Там фактически твоя задачка.
Да и вообще рекомендую к прочтению.

Если понадобится больше информации:
http://lmgtfy.com/?q=C%2B%2B+%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
;)

70K
18 ноября 2011 года
Настен
37 / / 13.10.2011
Добрый день!
Задача: Михаэль и Ральф Шумахеры решили помериться силами,проехав новую китайскую трассу.Ральф подумал,что разобьет трассу на равные интервалы, и каждый из них будет проходить с разной скоростью, выбирая оптимальную скорость для каждого участка пути. Михаэль, в свою очередь, решил,что лучше всю трассу проехать с одинаковой скоростью.В результате оба брата финишировали одновременно. Необходимо, зная скорость Ральфа Шумахера на каждом участке трассы определить, с какой скоростью трассу прошел Михаэль.
Формат входных данных: в первой строке входного файла задано целое число N- количество участков трассы,на границах которых менял скорость Ральф.(1<=N<=100000)
во второй строке через пробел записаны целые числа Vi(i=1..N),каждое из которых соответствует скорости болида Ральфа на i-ом участке.
Формат выходных данных: в выходной файл наша программа должна вывести одно число-скорость болида Михаэля в этой гонке с точностью до четырех знаков после десятичной точки.
имя входного файла:input.txt, имя выходного: output.txt/
9.7K
18 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: Настен
Добрый день!
Задача: Михаэль и Ральф Шумахеры решили помериться силами,проехав новую китайскую трассу.Ральф подумал,что разобьет трассу на равные интервалы, и каждый из них будет проходить с разной скоростью, выбирая оптимальную скорость для каждого участка пути. Михаэль, в свою очередь, решил,что лучше всю трассу проехать с одинаковой скоростью.В результате оба брата финишировали одновременно. Необходимо, зная скорость Ральфа Шумахера на каждом участке трассы определить, с какой скоростью трассу прошел Михаэль.
Формат входных данных: в первой строке входного файла задано целое число N- количество участков трассы,на границах которых менял скорость Ральф.(1<=N<=100000)
во второй строке через пробел записаны целые числа Vi(i=1..N),каждое из которых соответствует скорости болида Ральфа на i-ом участке.
Формат выходных данных: в выходной файл наша программа должна вывести одно число-скорость болида Михаэля в этой гонке с точностью до четырех знаков после десятичной точки.
имя входного файла:input.txt, имя выходного: output.txt/


Леди, ну, это даже не смешно. В чем проблема то? Есть трасса из нескольких фрагментов. Длину каждого принимаем за 1. Время прохождения: расстояние, деленное на скорость для данного участка. Суммируем время. В конце делим расстояние (количество участков, так как принимали длину каждого за 1) на получившееся в сумме время и получаем скорость второго. Чистая математика уровня 6го класса. Что касается программной части, то цикл for вы наверняка уже проходили, для разделения входной строки по пробелу служит метод split и первый же запрос в гугле "c++ split string" выдаст уйму решений на любой вкус. Не знаете английского? Не беда "c++ разделить строку" выдаст все те же 10+ страниц результатов. Чтение\запись в файл должна была уже проходиться и не раз. Если нет - опять же запрос в гугле "с++ чтение запись файла" выдаст уйму готовых решений.
Вам остается лишь собрать и проглотить. Пережевали уже все за вас и не раз. ;)

70K
19 ноября 2011 года
Настен
37 / / 13.10.2011
Ну все таки,может примерный код программы напишешь....
260
19 ноября 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: Настен
Ну все таки,может примерный код программы напишешь....



А может, вы хоть какое-то усилие приложите?

1
19 ноября 2011 года
kot_
7.3K / / 20.01.2000
Цитата: Настен
Ну все таки,может примерный код программы напишешь....


бан. пока на семь дней

277
20 ноября 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: f0rbidden
есть шаблон template <class T, int M, int N>
нужно сделать чтобы конструктор Matrix() (по умолчанию) заполнял матрицу нулями. матрица должна содержать строки (char*).
const int p=2,q=3;
Matrix<char*,p,q> m1; //вот так объявляю
как переделать конструктор?

class Matrix {
T mat[M][N];
public:
int z;
Matrix(){
for (int i=0;i<M;i++) {
for (int j=0;j<N;j++) {
mat[j]=0;
}
}
};
. . .




class Matrix {
T mat[M][N];
public:
int z;
Matrix(){
for (int i=0;i<M;i++) {
for (int j=0;j<N;j++) {
mat[j]=new char[2];
mat[j][0]='0';
mat[j][1]=0;
}
}
};

9.7K
20 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: f0rbidden
спасибо большое, очень помог. не понятно только, почему один ноль в кавычках, другой нет. но по-другому не работает. буду разбираться..


Потому что у тебя строки. В Си каноническая строка из char'ов - это просто указатель на ее начало в памяти. У нее нет длины и единственный признак ее конца - терминирующий ноль. Поэтому вначале записывается символ '0' - его ANSI-код 30, затем символ с кодом 0, визуального представления он не имеет. Просто сообщает, что строка здесь закончилась и большинство методов работы со строками воспримут это как конец строки.

По второму - у тебя же матрица. Тоесть двумерный массив. А ты указываешь индекс первого измерения. Соответственно возвращается тебе все второе измерение в количестве. И почему ты в случае если индекс больше M возвращаешь mat[1]? Первым рядом будет mat[0] - это раз, и два: если M == 0, то и его в матрице не будет.

Но если хочется поизвращаться, то выглядеть это будет наверное так:

 
Код:
template <class T, int M, int N> T* Matrix<T,M,N>:perator [](int index1, int index2) {
    return (index1 < M) ? ((index2 < N) ? mat[index1][index2] : mat[index1][0]) : ((index2 < N) ? mat[0][index2] : mat[0][0]);
}


Я не сишник, могу ошибаться.
73K
23 ноября 2011 года
Альтер Эго
5 / / 01.10.2011
Доброго времени суток)
Столкнулся с непонятной проблемой.
Есть функция, простейшая впринципе:

int& hit_in_the_interval(vector<double>& numb, double& a, double& b)
{
int nu=0;
for(vector<double>::iterator iter =numb.begin(); iter!=numb.end();iter++)
{
if ( (*iter>=a) && (*iter)<=b ) nu++;
}
return nu;
}

Суть проблемы: если (*iter)==a то nu++, но если то же самое для b, то есть (*iter)==b, то ничего к nu не добавляется.
Кто-нибудь сталкивался с такой проблемой?
278
23 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
Покажите, с какими параметрами вы вызываете функцию. Скорее всего, это известная проблема, связанная с ограниченностью разрядной сетки.
73K
23 ноября 2011 года
Альтер Эго
5 / / 01.10.2011
Спасибо за участие)
Проблема решилась с помощью округления:
int(b*100 + 0.5)/100.0
Видимо где-то разряды левые были.
277
23 ноября 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: f0rbidden
Код:
template <class T, int M, int N>
class Matrix {
T mat[M][N];
public:
Matrix(){

    for (int i=0;i<M;i++) {
    for (int j=0;j<N;j++) {
        mat[j]=new char[2];
        mat[j][0]='0';
        mat[j][1]=0;
    }
    }
        };
.....................................

как это сделать? какую-то функцию надо вызывать в конструкторе? или как



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

В основном тебе надо понять чем указатель (char*,int* ...) отличается от типа (char,int ...), тогда все вопросы отпадут. В нете инфы более чем.

77K
25 ноября 2011 года
us016
1 / / 25.11.2011
Доброй ночи всем !!! Если етсь специалисты - скажите трудно освоить с++ если знаешь php ?!? Много прочитал книжек - но по ходу пишут как и раньше бестолковые писатели !! Потому как php выучил без проблем - хороший язык программирования. И слышал что схожи с++ и php ! Где более понятно сформулированы статьи ?
9.7K
26 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: us016
Доброй ночи всем !!! Если етсь специалисты - скажите трудно освоить с++ если знаешь php ?!? Много прочитал книжек - но по ходу пишут как и раньше бестолковые писатели !! Потому как php выучил без проблем - хороший язык программирования. И слышал что схожи с++ и php ! Где более понятно сформулированы статьи ?


http://lib.ru/CPPHB/cpptut.txt
С++ и php схожи, наверное, лишь в одном - и тот и другой ООП. Первый в большей степени, второй в меньшей. На этом сходства кончаются. Тем не менее, если ты действительно хорошо освоил php во всех его тонкостях - нет, не сложно. Вопросы возникнут лишь по адресации (указатели) и синтаксическим конструкциям аля

 
Код:
while(*p++ = *q++);
Но это уже извращения которые придут в твою жизнь со временем, а вначале они будут выглядеть вполне цивилизованно:
 
Код:
int length = strlen(q)
for (int i = 0; i <= length; i++) p = q;

Так что дерзай и не думай о трудностях! Они будут, но ты их одолеешь!
70K
26 ноября 2011 года
Настен
37 / / 13.10.2011
Здравствуйте!
Я начала писать примерный код программы:
Класс Base должен содержать не менее 2 полей и не менее 2 методов. Создать перечисленные классы как производные для базового класса (Base) с различным уровнем доступа, переопределить в них 1 метод базового класса. Объявить и описать собственные методы в производных классах. Продемонстрировать работу классов.
(студент, преподаватель, заведующий кафедрой.)
Код:
# include <iostream>
using namespace std;
class student
{
public:
    student(){cout<<"конструктор student\n";}
    ~student(){cout<<"деструктор student\n";}
};
class teacher
{
public:
    teacher(){cout<<"конструктор teacher\n";}
    ~teacher(){cout<<"деструктор teacher\n";}
};
class head
{
public:
    head(){cout<<"конструктор head\n";}
    ~head(){cout<<"деструктор head\n";}
};
class base
{
public:
    base(){}
    ~base(){}
   
    string getSurname();
    string getName();
    void setSurname(string value);
    void setName(string value);

private:
    string name;
    string surname;
};

Можно узнать,правильны ли я начала???
9.7K
26 ноября 2011 года
Vitamant
228 / / 07.02.2011
Кхм... ну, так раз ты уже создала класс Base (классы пишутся с большой буквы), так унаследуй от него студента, учителя и заведующего.
А так - да, верно, только реализовать методы
 
Код:
string getSurname();
    string getName();
    void setSurname(string value);
    void setName(string value);

не забудь. А то так и оставишь заглушками.
70K
27 ноября 2011 года
Настен
37 / / 13.10.2011
Вот я переделала.только я не совсем понимаю как реализовать и переопределить методы...
Код:
# include <iostream>
using namespace std;
class Base
{
public:
    Base(){}
    ~Base(){}
   
    string getSurname();
    string getName();
    void setSurname(string value);
    void setName(string value);

private:
    string name;
    string surname;
};

class Student:public Base
{
public:
    Student(){cout<<"конструктор Student\n";}
    ~Student(){cout<<"деструктор Student\n";}
};
class Teacher:protected Base
{
public:
    Teacher(){cout<<"конструктор Teacher\n";}
    ~Teacher(){cout<<"деструктор Teacher\n";}
};
class Head:private Base
{
public:
    Head(){cout<<"конструктор Head\n";}
    ~Head(){cout<<"деструктор Head\n";}
};
9.7K
27 ноября 2011 года
Vitamant
228 / / 07.02.2011
"Реализовать" в данном случае значит, вместо заглушки которая ничего не делает
 
Код:
void setName(string value);

написать полезный код, н.п:
 
Код:
void setName(string value)
{
  name = value; // пальцем в небо, не видел в С++ string, не знаю как они у вас задаются и что из себя представляют
}


А что касается переопределения, то ты же уже переопределяла операторы. Я в С++ не силен, может, кто поправит, но, кажется, достаточно определить метод с тем же именем и набором параметров в дочернем классе. Возможно, еще добавить слово virtual перед определением метода в базовом классе.
Еще вызывают сомнения protected Base, private Base также плохо себе представляю как это безобразие работает, но, вероятно, для всех классов оно должно быть одинаковым (и мое мнение - private, дабы позаимствовать все поля, но опять же могу ошибаться).
77K
28 ноября 2011 года
Feerverk
5 / / 28.11.2011
[COLOR="red"][/COLOR]Подскажите пожалуйста - как решить задачу ,
Программа получает два числа Между 999.00 и 100.00 .
В целой части каждого числа она проверяет совпадение между ними .
Например 423.567 и 728:Есть совпадение в десятках
или 423.567 и 623 :Есть совпадение в десятках и еденицах .
Или она пишет - совпадений в целой части чисел НеТ

Бьюсь челом о монитор уже , не понимаю что не так .....
Начал с вычленения целого числа
#include <stdio.h>
void main()
{
int repeat=1;
int num1,num2,num3;
int temp,tmp=1,mull=1;
int newnumber=0;
double numa=0,numb=0;
double tempa=0,tempb=0;
double shaarita,shaaritb;
int i=0;
int counta=0,countb=0;
do
{
printf("Enter 2 diferent decimal numbers between 100.00 to 999.00 \n");
scanf("%lf%lf",&tempa,&tempb);
if(!(tempa<999.00 && tempa>100.00 && tempb<999.00 && tempb>100.00))
{
printf("Wrong number, try again! \n");
}
}
while(!(tempa<999.00 && tempa>100.00 && tempb<999.00 && tempb>100.00));
printf("%lf%lf \n",tempa , tempb);
do {
[COLOR="red"]shaarita=tempa%10;[/COLOR](тут выдаёт ошибку
tempa*=10;
counta++t operand has type 'double'


}
Спасибо за внимание....
14
28 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Брать остаток от деления оператором % можно лишь у целых чисел
77K
28 ноября 2011 года
Feerverk
5 / / 28.11.2011
Подскажите пожалуйста - как мне получить целую часть от числа , если переменная была введена через double или float
9.7K
28 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: Feerverk
Подскажите пожалуйста - как мне получить целую часть от числа , если переменная была введена через double или float


Через приведение типов или методы округления.

77K
28 ноября 2011 года
Feerverk
5 / / 28.11.2011
Цитата: Vitamant
Через приведение типов или методы округления.


Немогли бы вы обьяснить чуть подробнее , я реально прошол 4 урока по с# ....
Я уже 4 часа сижу нал задачей ...=(
Спасибо .

9.7K
28 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: Feerverk
Немогли бы вы обьяснить чуть подробнее , я реально прошол 4 урока по с# ....
Я уже 4 часа сижу нал задачей ...=(
Спасибо .


Так! Давай вначале определимся - какой язык тебя интересует. Твой код был на С++. Сейчас ты говоришь о C#. Так что же?

В случае с C# приведение типов выглядит так:
double a = 1.0;
int b = (int)a;

Примерно тоже самое сделает и следующий метод:
int b = Convert.ToInt32(a);

А что до округления, то:
int b = Math.Round(a); // округление до ближайшего
или
int b = Math.Floor(b); // округление вниз

В С++ в общем-то примерно также (приведение, кажется, и вовсе один в один) с той лишь разницей, что Round и Floor у вас зовутся, вероятно, иначе и лежат где-нибудь в другом месте. :)

На будущее - всегда указывай язык программирования.

70K
28 ноября 2011 года
Настен
37 / / 13.10.2011
Добрый вечер!
Я переписала код программы про наследование:
Код:
# include <iostream>
using namespace std;
class Base
{
protected:
    char * name;
    char * surname;
    int age;
public:
    Base()
    {
        name=NULL;
        surname=NULL;
        age-0;
    }
    ~Base(){}
   
    void Print(){}
    void Input(){};
};

class Student:public Base
{
private:
    int coorse,group;
    int rate;
public: Student()
        {
            coorse=0;
            group=0;
            rate=0;
        }

    ~Student()
    {
        delete name;
        delete surname;
    }
void Print()
{
    cout<<name<<","<<surname<<","<<age<<","<<coorse<<","<<group<<","<<rate<<endl;
}
void Input()
{
    cout<<"Введите имя студента "<<endl;
    cin>>name;
    cout<<"Введите фамилию студента "<<endl;
    cin>>surname;
    cout<<"Введите  возраст студента "<<endl;
    cin>>age;
    cout<<"Введите  курс студента"<<endl;
    cin>>coorse;
    cout<<"Введите группу студента"<<endl;
    cin>>group;
    cout<<"Введите группу студента"<<endl;
    cin>>group;
    cout<<"Введите рейтинг  студента"<<endl;
    cin>>rate;
}
};
class Teacher:public Base
{
    char*post;
    float salary;
public:
    Teacher()
    {
        post=NULL;
        salary=0;
    }
    ~Teacher()
    {
        delete name;
        delete surname;
        delete post;
    }
void Print()
{
    cout<<name<<","<<surname<<","<<age<<","<<post<<","<<salary<<endl;
}
void Input()
{
    cout<<"Введите имя преподавателя "<<endl;
    cin>>name;
    cout<<"Введите фамилию преподавателя "<<endl;
    cin>>surname;
    cout<<"Введите  возраст преподавателя "<<endl;
    cin>>age;
    cout<<"Введите должность преподавателя "<<endl;
    cin>>post;
    cout<<"Введите зарплату преподавателя"<<endl;
    cin>>salary;
   
};
class Head:public Base
{
    char*chair;


public:
    Head()
    {
        chair=NULL;
    }
    void Print()
{
    cout<<name<<","<<surname<<","<<age<<","<<chair<<endl;
}
void Input()
{
    cout<<"Введите имя заведующего кафедрой "<<endl;
    cin>>name;
    cout<<"Введите фамилию заведующего кафедрой "<<endl;
    cin>>surname;
    cout<<"Введите  возраст заведующего кафедрой "<<endl;
    cin>>age;
    cout<<"Введите кафедру заведующего "<<endl;
    cin>>chair;
    {
        delete name;
        delete surname;
        delete chair;
    }

};
void main()

Только теперь не знаю что описывать в главной функции..
77K
29 ноября 2011 года
Feerverk
5 / / 28.11.2011
:cool:
Цитата: Vitamant
Так! Давай вначале определимся - какой язык тебя интересует. Твой код был на С++. Сейчас ты говоришь о C#. Так что же?

В случае с C# приведение типов выглядит так:
double a = 1.0;
int b = (int)a;

Примерно тоже самое сделает и следующий метод:
int b = Convert.ToInt32(a);

А что до округления, то:
int b = Math.Round(a); // округление до ближайшего
или
int b = Math.Floor(b); // округление вниз

В С++ в общем-то примерно также (приведение, кажется, и вовсе один в один) с той лишь разницей, что Round и Floor у вас зовутся, вероятно, иначе и лежат где-нибудь в другом месте. :)

На будущее - всегда указывай язык программирования.


Спасибо!!!!!!!!!!!!!!!!!!!!!:cool:
Сделал так :
float b; scanf("%f",b);
int a;

a=(int)b;

75K
29 ноября 2011 года
Teddy_bear
8 / / 29.11.2011
Не получается записать данные в wav-файл. Гляньте плиз, что не так.

Создал такой класс для манипуляций с вавками:
class FloatWaveFile
{
public:
BYTE ChunkId[4];
DWORD ChunkSize;
BYTE Format[4];
BYTE Subchunk1ID[4];
DWORD Subchunk1Size;
short AudioFormat;
short NumChannels;
DWORD SampleRate;
DWORD ByteRate;
short BlockAlign;
short BitsPerSample;
BYTE Subchunk2ID[4];
DWORD Subchunk2Size;
float *Data;
};


out.Data=(float*)calloc((imp.Subchunk2Size+in.Subchunk2Size)/2,sizeof(float));

{....Тут идут вычисления...}

void __fastcall TForm1::Button6Click(TObject *Sender)
//заполняем заголовок будущего файла
{
out.ChunkId[0]='R'; out.ChunkId[1]='I'; out.ChunkId[2]='F'; out.ChunkId[3]='F';
out.ChunkSize=(36 + (in.Subchunk2Size+imp.Subchunk2Size)*2);
out.Format[0]='W'; out.Format[1]='A'; out.Format[2]='V'; out.Format[3]='E';
out.Subchunk1ID[0]='f'; out.Subchunk1ID[1]='m'; out.Subchunk1ID[2]='t'; out.Subchunk1ID[3]=' ';
out.Subchunk1Size=16;
out.AudioFormat=1;
out.NumChannels=1;
out.SampleRate=44100;
out.BitsPerSample=32;
out.ByteRate=out.SampleRate * out.NumChannels * out.BitsPerSample/8;
out.BlockAlign=out.NumChannels * out.BitsPerSample/8;
out.Subchunk2ID[0]='d'; out.Subchunk2ID[1]='a'; out.Subchunk2ID[2]='t'; out.Subchunk2ID[3]='a';
out.Subchunk2Size=(in.Subchunk2Size+imp.Subchunk2Size)*2;


outptr = fopen("C:/conv_out.wav","wb");
fwrite(&out,sizeof(out),1,outptr);
fclose(outptr);
ShowMessage("File saved");
}

Причем заголовок записывается правильно - файл распознается винампом и видны параметры. Но данных нет. Массив *Data на момент записи у меня точно заполнен, т.к. я вывожу его на чарт в программе и вижу содержимое.
ХЕЛП!
9.7K
29 ноября 2011 года
Vitamant
228 / / 07.02.2011
Teddy_bear
1) Используй тег CODE.
2) А что у тебя должно было туда записаться? 4 байта? Их физичкски в файле нет? Что за "массив *Data"? У тебя там указатель на float. Никакого массива я вот не наблюдаю. А если уж там должен быть массив, то sizeof(out) не станет вычислять длину динамического массива.

Настен
В соответствии с заданием. Что надо? Продемонстрировать работу? Ну вот и создай экземпляры учащегося, учителя и зав.кафедры. Воспользуйся унаследованными методами. Продемонстрируй что какие-то из них переопределены (делают не одно и тоже).
75K
29 ноября 2011 года
Teddy_bear
8 / / 29.11.2011
Vitamant
1) Ок.
2) Должен записываться массив float-ов, находящихся по адресу out.*Data. По крайней мере, такова задумка) А 4 байта и записываются, будь они неладны, не считая заголовка. Всего записывается 48 байт.
А как мне правильно записать такой массив? Задать его размер константой не могу, т.к. он формируется в программе из результатов вычислений.
277
29 ноября 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: Teddy_bear
...он формируется в программе из результатов вычислений.



Ну так в вычислениях и запоминаё его размер или сразу в файл пиши.

75K
29 ноября 2011 года
Teddy_bear
8 / / 29.11.2011
Сделал вот так:
 
Код:
fwrite(&out,sizeof(out)-4,1 ,outptr);
fwrite(out.Data,sizeof(float),(in.Subchunk2Size+imp.Subchunk2Size)/2,outptr);
fclose(outptr);

Хоть и извращенно, но записывается)
Далее возник еще один трабл - аудио данные сильно искажены. В аудио-редакторе значения сильно зашкаливают за 0 дБ, хотя значения семплов находятся в пределах 10^6. Это вроде как влазит в 32-х битный float. И самое непонятное для меня - если сделать нормализацию, данные восстанавливаются. Тоесть, переполнения нет и данные не потеряны. Я правильно понимаю?
Вопросы стандартные: Кто виноват и что делать?))

upd
Допер, в чем дело...не нравится ей тип float. С int все ок. Можно что-то сделать чтоб с флоатом читалось по человечески?

Дело в том, что без ввода доп. коэффициента в алгоритм свертки результат имеет значения (при 16-ти битных входных файлах), выходящие за пределы int. Если, делая свертку, попутно домножать на какой-то 0.0001, это сильно увеличивает время вычисления. Не подходит. Уменьшение входных значений ведет к потере точности - тоже не катит.
Есть какой-то выход?
14
30 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: Teddy_bear

Есть какой-то выход?



Нормализация

75K
30 ноября 2011 года
Teddy_bear
8 / / 29.11.2011
Phodopus
Не знаю, что под этим имеете ввиду вы, но я уже решил проблему домножением на 0.1 во внешнем цикле (вычисление идет во флоутах без доп. действий, поэтому на скорость не влияет) и после этого переводом в инт.
А вы что имели ввиду под нормализацией?
9.7K
30 ноября 2011 года
Vitamant
228 / / 07.02.2011
Цитата: Teddy_bear
Phodopus
Не знаю, что под этим имеете ввиду вы, но я уже решил проблему домножением на 0.1 во внешнем цикле (вычисление идет во флоутах без доп. действий, поэтому на скорость не влияет) и после этого переводом в инт.
А вы что имели ввиду под нормализацией?


Ммм... я в глаза не видел спецификации по WAV-файлу, но меня очень настораживают эти ваши динамические данные... если больше ничего не меняется, то с чего ты взял, что проигрыватель будет разбираться - float у тебя там или int? Он просто сожрет 4 байта и будет считать их int'ом смешав в кучу и мантиссу и порядок. Проверь все же спецификацию по wav-файлам - что там должно быть. float или int.

75K
02 декабря 2011 года
Tanatogluttony
4 / / 02.12.2011
всем привет, я столкнулся с нерешаемой для себя проблемой
есть текстбоксы, которые показывают значения, основываясь на формулах из длл
например
textBoxtop.Text = Math.Round(Hc.Gettop(Hc._ttn, Hc._tp), 1).ToString();
очищается текстбокс такой строчкой
Hc.Settop(Convert.ToDouble(textBoxtop.Text));
проблема в том, что после запуска расчетов заного, она не очищает текстбокс, а вылетает с ошибкой
потому что в текст боксе дробное значение, а она работает только с целочисленными

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

#region Кнопка "Расчитать"
private void btnRas4_Click(object sender, EventArgs e)
{
// Запустить процедуру расчета
RunSolver();
}

private void DataRefresh()
{

Hc.Setttn(Convert.ToDouble(textBoxttn.Text));
Hc.Settp(Convert.ToDouble(textBoxtp.Text));
Hc.SetL(Convert.ToDouble(textBoxL.Text));
//Hc.Settop(Convert.ToDouble(textBoxtop.Text));
//Hc.SetKV(Convert.ToDouble(textBoxKV.Text));
//Hc.SetKT(Convert.ToDouble(textBoxKT.Text));
//Hc.SetPr(Convert.ToDouble(textBoxPr.Text));
//Hc.SetGr(Convert.ToDouble(textBoxGr.Text));
//Hc.SetRa(Convert.ToDouble(textBoxRa.Text));
//Hc.SetNu(Convert.ToDouble(textBoxNu.Text));
//Hc.Seta(Convert.ToDouble(textBoxa.Text));

}

private void RunSolver()

{
if (FFlag) DataRefresh();
MessageBoxButtons buttons = MessageBoxButtons.OK;
MessageBox.Show("Расчет успешно завершен", " ", buttons, MessageBoxIcon.Information);

if (Hc.GetL() <= 0)
{
MessageBox.Show("Определяющий размер не может быть меньше 0, измените условия задачи");
return;
}
textBoxtop.Text = Math.Round(Hc.Gettop(Hc._ttn, Hc._tp), 1).ToString();
//textBoxtop.Text = Convert.ToString(Math.Round((double)Hc.Gettop(Hc._ttn, Hc._tp), 1).ToString());
textBoxKV.Text = Math.Round(Hc.GetKV(Hc._top), 10).ToString();
textBoxKT.Text = Math.Round(Hc.GetKT(Hc._top), 10).ToString();
textBoxPr.Text = Math.Round(Hc.GetPr(Hc._top), 10).ToString();
textBoxGr.Text = Math.Round(Hc.GetGr(Hc._KV, Hc._L, Hc._ttn, Hc._tp), 0).ToString();
//textBoxRa.Text = Math.Round(Hc.GetRa(Hc._Gr(Hc._KV, Hc._L, Hc._ttn, Hc._tp), Hc._Pr(Hc._top), 0)).ToString();
//textBoxNu.Text=Convert.ToString(Math.Round((double)
//textBoxa.Text = Math.Round(Hc.Geta(Hc._Nu, Hc._KT, Hc._L), 1).ToString();


btnOt4.Enabled = true;
отчетToolStripMenuItem.Enabled = true;



}

#endregion

подскажите, что нужно изменить ?
72K
02 декабря 2011 года
Dethrone
10 / / 22.10.2011
всем доброго времени суток, я меньше 2 недель назад начал учить программирование на C++, и вот столкнулся с проблемой. Из друзей посоветоваться почти не с кем, так как только один друг программист и тот начинающий, и тот программирует на бейсике))))
вот такой код:


#include "stdafx.h"
#include <iostream>
using namespace std;

class Cat
{
public:
Cat();
~Cat();
int GetX(){return *X;}
void SetX(int x)
{
*X=x;
}
private:
int *X;
};
Cat::Cat()
{
int *X= new int;
}
Cat::~Cat(){delete X;}
int _tmain(int argc, _TCHAR* argv[])
{
Cat *Polly= new Cat;
Polly->SetX(6);
cout<<Polly->GetX();
system("pause");

return 0;
}

создаем класс кот, создаем объект данного класса место для хранения которого выделяется в области динамической памяти, присваиваем скрытому указателю значение 6, и в результате у меня я так понял значение 6 присваивается не переменной, а самому адресу указателя. Я все делал так как писалось в учебнике. В чем моя ошибка???!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог