Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)
{
public:
TBase_csv (int x, int y);
~TBase_csv();
private:
int **base_matrix;
int X, Y;
public:
void input_data(){}
};
TBase_csv::TBase_csv(int x, int y)
{
base_matrix = new int*[x];
for(int i=0; i<x; ++i)
base_matrix = new int[y];
X=x;
Y =y;
}
TBase_csv::~TBase_csv()
{
for (int i = 0; i< X; i++)
delete [] base_matrix;
}
Пробовал что-то типо:
Image1->Left = Cursor.y;
Image1->Top = Cursor.x;
Крутил и так и сяк.... и никак((
Пробовал что-то типо:
Image1->Left = Cursor.y;
Image1->Top = Cursor.x;
Крутил и так и сяк.... и никак((
Обрабатывай событие OnMouseMove() для формы
{
Image1->Left = X;
Image1->Top = Y;
}
+ надо обрабатывать аналогичное событие для Image, потому что движение вправо-вниз приведет к тому что указатель будет над Image и событие для формы генерироваться не будут
{
Image1->Left = Image1->Left + X;
Image1->Top = Image1->Top + Y;
}
P.S. для красоты можно включить двойную буферизацию :)
имею такой код:
Match m = r.Match(webBrowser1.DocumentText);
while (m.Success)
{
foreach (Capture c in m.Groups["path"].Captures)
{
richTextBox1.Text += c.Value + "\r\n";
m = m.NextMatch();
}
}
Проблема в том, что ссылки вида
<a target="_top" class="tape-title" href="?id_topic=5027">
выкусывать не хочет.
Подскажите в чем проблема.
И почему это вам не айс прописать их?
Даны натуральное n, действительное x. Вычислить sin x+ sin x^2+ sin x^3 +...+ sin x^n.
Не могу найти ошибку, помогите.
private void button1_Click(object sender, EventArgs e)
{
int n, i;
double s, x, cur;
double power, res;
x = Convert.ToDouble(textBox1.Text);
n = Convert.ToInt32(textBox2.Text);
s = 0;
res = x;
for (i = 2; i < n; i++)
{
res = res * x;
}
power = res;
for (i = 1; i < n; i++)
{
cur = Math.Asin(power(x, i));
}
s = s + cur;
label1.Text = Convert.ToString(s);
}
for (i = 2; i < n; i++)
{
res = res * x;
}
}
может быть не x a n???:)
Кстати возведение в степень:
Math.Pow(double x,double y);
...
:)
Что простите? :) Не парьтесь, пропишите их вызов...
Язык borland c++ builder 6.
Язык borland c++ builder 6.
TButton *b = new TButton(Form1);
b->Parent = Form1;
// Уничтожаем
Form1->RemoveControl(b);
delete b;
Form1->RemoveControl(b);
delete b;
чёт не пашет:confused:
в теле цикла послей каждой итрерации проверяй на конец файла функцией feof(in);
FILE *F = fopen("Read.txt","r");
char ch;
fscanf(F,"%c",&ch)
do{....}while(fscanf(F,"%c",&ch)>-1)
-1 - окончаниес строки
Ошибку в студию... Телепатов нет.
Можно ещё так (это точно работает, хотя и то должно):
delete b;
Нет...
У класса есть конструктор:
[COLOR="Navy"]TBase_csv::TBase_csv(int size){
string *list = new std::string[size];
i = size;
}[/COLOR]
без string(выделил жирным) не работает, говорит что не знает, что такое list. Но я ведь уде прописал string list как поле класса... Вышеуказаный код- это верно или надо подругому?
[COLOR="Red"]>>>C конструктором разобрался, но второй вопрос ещё в силе(написан ниже)[/COLOR]
И ЕЩЁ...
Пусть всётаки создался экземплыр класса, конструктор правильно сработал... Теперь надо прочитать input файл и каждую строку загнать в стринговый массив(по ячейке на строку).
Я делаю так:
[COLOR="#000080"]void TBase_csv::read_data(){ //метод класса читает исходные данные и заполняет стринговый массив(поле класса)
ifstream in;
in.open("database.txt");
int step = 0;
if(!in)cout << "ERROR!!! No input file!";
for(int j=0; j<i; j++){
in >> list[j];
}
in.close();
cout << rus_str("Файл загружен...") << endl;
}[/COLOR]
Но файлик не считывается. Кореш сказал что так напрямую загонять в массив нельзя и лучше сделать промежуточный char. Это так? А можно как по другому?
Буду очень злагодарен за куски кода
Заранее извиняюсь за тупые вопросы, я только начал изучать C++...
Если использовать временное char то может так:
[COLOR="Blue"]char temp_char[256];
for(int j=0; j<i; j++){
in >> temp_char;
cout << temp_char;
list[j] = list[j] + *temp_char;
}[/COLOR]
хотя...вот эта строчка: [COLOR="#0000ff"]list[j] = list[j] + *temp_char;[/COLOR] [COLOR="Red"]так нельзя?[/COLOR]
Но файлик не считывается. Кореш сказал что так напрямую загонять в массив нельзя и лучше сделать промежуточный char. Это так? А можно как по другому?
Кореш правильно сказал! Напрямую читать в string нельзя.
Если использовать временное char то может так:
[COLOR="Blue"]char temp_char[256];
for(int j=0; j<i; j++){
in >> temp_char;
cout << temp_char;
list[j] = list[j] + *temp_char;
}[/COLOR]
хотя...вот эта строчка: [COLOR="#0000ff"]list[j] = list[j] + *temp_char;[/COLOR] [COLOR="Red"]так нельзя?[/COLOR]
Лучше так написать: list[j] = *temp_char;
Опять мой неправильный компилятор делает то, что нельзя... Например:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
fstream file("test.txt", ios::in | ios::out | ios::trunc);
vector<string> vstr;
vstr.push_back("first");
vstr.push_back("second");
vstr.push_back("third");
for(size_t i = 0; i < vstr.size(); ++i)
file << vstr << endl;
file.seekg(0);
string str;
while(getline(file, str , '\n'))
cout << str << endl;
return 0;
}
Лучше так написать: list[j] = *temp_char;
Что-то здесь не то... Программа виснет на этой строчке и Vista выдаёт что программа остановлена из за ошибки, решение которой найти она не смогла... Короче...похоже так тохе не льзя, что-то с типами данных...
Что может быть не так?
[COLOR="Navy"]TBase_csv::TBase_csv(int size){
string *list = new std::string[size];
i = size;
}[/COLOR]
...
Буду очень злагодарен за куски кода
...
Что может быть не так?
"Не так" начинается уже в этой строке:
string *list = new std::string[size];
Для чего нужен этот гибрид-мутант? Если используете std::string, то почему не использовать стандартные контейнеры? Тем более, что многие уважаемые авторы книг рекомендуют новичкам пользоваться именно контейнерами stl, а не массивами.
Пример, как загрузить в std::string, я привел. Разберитесь и вставьте в свой класс.
мне тут задали задачку хотел бы уяснить некоторые моменты
1)Мне дан массив указателей на структуры:
#include <stdio.h>
struct book {
char author[30];
char title[30];
int year;
char place[30];
};
void main()
{
struct book *him1[10];
//..................
}
Как работать с этим массивом к примеру как ввести автора первого элемента массива
2)И еще попутный вопрос, какие параметры передавать в функцию(к примеру вывода массива на экран)
Либы и инклуды скидываю в папки как у билдера.
Скачал я за ночь SDK на 500 мб и книги...
Книги тока для Visual c++
но он у меня есть,тока чёто на вижуале не прёт.Говорит windows.h нет((.хотя я его подключаю.Указываю инклуды и либы а не прёт((
Может хоть книги кто нить подкинет???
например, с помощью API GetEnvironmentVariable
GetEnvironmentVariable("USERPROFILE", szEnvVariable, MAX_PATH);
#include<stdio.h>
#include<conio.h>
#define S 4
int main() {
int m
int i,y,min,j,k;
for(i=0;i<S;i++) {
scanf("%d",&m);
for(i=0;i<S-1;i++)//находим минимальный элемент масива
1) min=i;//??
for(j=i+1;j<S;j++)
2) if(m[j]<m[min]) min=j;
.
.
подскажите что присваивается на этапе 1 min и что такое i? индекс или какой то элемент массива??как на первом этапе определился минимальный элемент??(не могу никак въехать в массивы):(
как находится первый минимальный элемент в этом коде?
буквально недавно стал внедряться в с++ есть очень замечательный учебник прекрасно все расписано. Вот с одним не могу разобраться.
Как правильно объявить и определить функцию типа void?
мне gcc вот что пишет:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, unsigned char) [with _Traits = std::char_traits<char>]
E:/gcc/include/c++/3.3.1/bits/ostream.tcc:580: error:
std::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*) [with
_CharT = char, _Traits = std::char_traits<char>]
исходник такой (нужно чтобы приложение выводило диапазон чисел):
using namespace std;
void print_out(int n);
int main() {
int n;
cout << "vvedite 4islo n: ";
cin >> n;
cout << "4isla ot 1 do " << n << " : " << print_out(n) << " ";
return 0;
}
void print_out(){
int i;
for(i=1;i<=n;i++)
cout << i;
}
буквально недавно стал внедряться в с++ есть очень замечательный учебник прекрасно все расписано. Вот с одним не могу разобраться.
Как правильно объявить и определить функцию типа void?
Вот это вы замудрили...
Во-первых, "функция типа void" - это просто функция, которая ничего не возвращает. В ней нет ничего особенного.
Просто в типе возвращаемого значения ставите void и все. Она кстати правильно определена. Если не считать того, что в описании аргумент описан, а в опеределении нет (опечатка наверное).
Во-вторых, чтобы ее так использовать она должна возвращать никак не void... Не вдаваясь в дебри, вот то, что вам нужно:
using namespace std;
void print_out(int n);
int main()
{
int n;
cout << "vvedite 4islo n: ";
cin >> n;
cout << "4isla ot 1 do " << n << " : ";
print_out(n);
return 0;
}
void print_out(int n)
{
for(int i=1; i <= n; i++) cout << i;
}
Комментировать такой КУСОК кода не имеет смысла, тем более, судя по тому куску, что есть - это неправильно работает...
Вам сюда: http://ru.wikipedia.org/wiki/Сортировка_выбором
using namespace std;
void* print_out(int n);
int main() {
int n;
cout << "vvedite 4islo n: ";
cin >> n;
cout << print_out(n);
return 0;
}
void* print_out(int n){
int i;
for(i=1;i<=n;i++)
cout << i << " ";
}
программа правда работает, однако выдает странный результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0x15
можете как-то прокомменитировать эти два момента: почему нужно ставить * после void (я так сделал на основе примера, правда WinMain()); и второе - что за 0х15 в конце резульата?... Зараннее благодарен...
using namespace std;
void* print_out(int n);
int main() {
int n;
cout << "vvedite 4islo n: ";
cin >> n;
cout << print_out(n);
return 0;
}
void* print_out(int n){
int i;
for(i=1;i<=n;i++)
cout << i << " ";
}
программа правда работает, однако выдает странный результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0x15
можете как-то прокомменитировать эти два момента: почему нужно ставить * после void (я так сделал на основе примера, правда WinMain()); и второе - что за 0х15 в конце резульата?... Зараннее благодарен...
Разница в вызове функции, точнее даже в месте вызова. Оптимизацию по привычке сделал :) Тем более там была ошибка...
В моем примере функция просто вызывается, а в вашем вызывается и потом выполняется оператор <<.
Т.е. сначала вызывается функция, пишет числа по-порядку, и возвращает некий результат, который подается на оператор <<. Этот оператор насколько видно из ошибок компилятор требует указатель на массив байтов (char*), заканчивающихся нулем.
В вашем случае вы вернули void* - который указывает вообще неизвестно куда - результат на экране :)
насчет звездочки не понял до конца, понял лишь одно, что это принципально другой расклад, который не подходит для моей задачи...
гцц выдавал ошибку потому что синтаксис в корне не верный... мозги ему тоже запудрил:)... спасибо вам большое... много еще изучить нужно... спасибо..
Тут все дело в операторе <<. Если коротко, в С++ можно переопределить любой оператор, а также определить (или переопределить) оператор для конкретного класса.
Оператор определяется почти как функция. Покажу на примере: напишем свою "хитрую" структуру и научим компилятор складывать такие структуры:
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
struct MyPoint
{
int X;
int Y;
int Z;
};
MyPoint operator+ (MyPoint &A, MyPoint &B)
{
MyPoint C;
C.X = A.X + B.X;
C.Y = A.Y + B.Y;
C.Z = A.Z + B.Z;
return C;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyPoint Position, Move, NewPosition;
NewPosition = Position + Move;
getch();
return 0;
}
В описании оператора первый параметр - то, что стоит перед оператором, второй - после... Если попытаться сложить MyPoint с целым числом, компилятор выдаст ошибку, что так делать нельзя - чувствуете аналогию с Вашим случаем?
Оператор может быть перегружен (вообще перегрузка - это создание одноименных функций, но с разными параметрами). Т.е. можно написать перегрузку для случая сложения MyPoint с int:
MyPoint operator+ (MyPoint &A, int B);
Так вот, в вашем случае в каком-то из подключенных файлов, описан оператор <<. Он имеет множество перегрузок, что позволяет сувать в него все, что угодно, от строк до чисел. Проще говоря там нечто типа:
ostream& operator<< (ostream& out, const signed char* s );
...
Весь список
Но вот для void перегрузки там естественно нет :) Поэтому компилятор категорически заявил, что void не может здесь использоваться....
А вот с указателем на void (void*) интереснее - видимо, компилятор решил, что это удовлетворяет какой-то из перегрузок, уж не знаю какой. Последствия вы и наблюдаете.
P.S. в аттаче полный пример (с перегрузкой для сложения с int, и оператор << для класса MyPoint).
P.P.S. получилось совсем не коротко :)
P.P.P.S. зато сам разобрался до конца ;)
все чаще стал задумываться - может имеет смысл вернуться к старому доброму VB?..ну или к делфи на худой конец...
все чаще стал задумываться - может имеет смысл вернуться к старому доброму VB?..ну или к делфи на худой конец...
В Delphi тоже есть перегрузка функций и операторов :) Я тоже с Delphi переходил на С++ Builder, разницу в языках даже толком не почувствовал, потом правда понял, что это вообще небо и земля.