Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 897
от 05.11.2007, 06:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 479, Экспертов: 69
В номере:Вопросов: 8, Ответов: 14


Вопрос № 107365: Здраствуйте! У меня такой вопрос о паралельном программирование(так как сылки на такой вопрос я не нашел решил спросить здесь): Мне сказали что паралельное программирование возможно только в ОС Unix, а windows не предназначена для этого(я лично с...
Вопрос № 107378: Здраствуйте уважаемые экспериты! У меня в программе содержится Процедура извлечения ресурсов из ехе'шника, после компиляции всей программы у меня выдфется такая ошибка [Linker ERROR]Unresolved external "WinMain" referenced from C:\Pr...
Вопрос № 107385: Добрый день. Я новичек. Нужна помощь. Есть форма 1, в которой 2 кнопки, как сделать так, чтобы при нажатии 1-й кнопки осуществлялся преход к форме 2, причем формы 1 видно бы не было и также с помощью кнопки назад на форме 2 можно было бы перейти обра...
Вопрос № 107390: Добрый вечер уважаемые эксперты.Прошу у вас помощи в решении задачки. Найти минимум функции x(в квадрате)+e(в степени -X) методом дихотомии....
Вопрос № 107396: Драсьте уважвемые эксперты! Помогите с кодом програмулины. Дан двумерный массив. Необходимо развернуть его на или 90 градусов по часовой стрелке. Заранее благодарен за ответ, Саша....
Вопрос № 107403: Уважаемые эксперты, помогите пожалуйста решить! Нужно составить программу, которая содержит информацию о сотрудниках. Сведения: -фамилия; -стаж работы; -пол; -год рождения; -адрес; Программа должна обеспечить: -поиск и...
Вопрос № 107426: Я сидел с часу до 6 пытаяся понять, как переменную из одного класса засунуть в другой. Помогите пожалуйста. .
Вопрос № 107433: надо сделать программку в MFC AppWizard(exe).там ее над сделать большую ну мне хотяб для примера...2 акошка Edit text и кнопка и чтоб при нажатии на кнопку число из 1 окошка умножалость на 2 и выводилось во 2 акошке. Вот мне хотяб узнать как...

Вопрос № 107.365
Здраствуйте! У меня такой вопрос о паралельном программирование(так как сылки на такой вопрос я не нашел решил спросить здесь):
Мне сказали что паралельное программирование возможно только в ОС Unix, а windows не предназначена для этого(я лично счетаю это бредом), правда ли это?
Если нет то подскажите где можно взять инфо о паралельном програмирование на виндовс и что для этого надо? И вообще лучше побольше инфо о паралельном прог.
Спасибо!
Отправлен: 30.10.2007, 13:13
Вопрос задал: CruelHity (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: SiRuS
Здравствуйте, CruelHity!
Почитайте про библиотеку MPICH. Она кроссплатформенная и довольно удобная. Речь идёт именно о распаралеливание задачь на несколько процессоров.

Приложение:

Ответ отправил: SiRuS (статус: 3-ий класс)
Ответ отправлен: 30.10.2007, 15:22
Оценка за ответ: 5
Комментарий оценки:
Да про mpi у меня тоже есть такие книги на англ! Хотелось конечно бы на русском! но на этом сайте я тоже нашел для себя коечто интересное спс! Я нашед что MPICH2 может работать по win32?

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, CruelHity!

Всё о пареллельном программировании - http://www.intuit.ru/department/se/parallprog/


---------
Свобода слова это не стрась в комментах!...
Ответ отправил: Гальцов Андрей Михаилович (статус: Студент)
Ответ отправлен: 30.10.2007, 17:03
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Хоть как открыл первую лекцию и увидел пролог, то сказать что я был сильно удивлен это не сказать ничего)))))) но потом чуть пролистал в вперед и увидел там много интересной инфо. И за это спасибо!!! Правда с ней разбираться и разбираться,((( СПАСИБО еще раз!!

Отвечает: Зелик Колабухин
Здравствуйте, CruelHity!

Очень здорово про параллельное программирование писал Джеффри РИХТЕР в книжке
"Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows". Особенно мне понравилось: "CreateThread - это Windows-функция, создающая поток. Но никогда не вызывайте ее, если Вы пишете код на С/С++. Вместо нее Вы должны использо вать функцию...". А далее очень-очень подробно объясняется, в чем проблема с майкросовтовской CreateThread и чем параллельное программирование в Win9* отличается от WinNT.
Ответ отправил: Зелик Колабухин (статус: 3-ий класс)
Ответ отправлен: 31.10.2007, 13:00
Оценка за ответ: 4
Комментарий оценки:
Спасибо конечно! но Джеффри РИХТЕР как мне кажеться описывает многозадачное(многопоточное) програмирования а не параллельное!


Вопрос № 107.378
Здраствуйте уважаемые экспериты!
У меня в программе содержится Процедура извлечения ресурсов из ехе'шника, после компиляции всей программы у меня выдфется такая ошибка [Linker ERROR]Unresolved external "WinMain" referenced from C:\Program Files\Borland\CBUILDER6\LIB\COW32.OBj , подскажите пожайлуста может у меня чтото в синтаксисе не правильно, или процедуру не правильно описал, или её надо было включить в void main(){Моя процедура ....} ?

Приложение:

Отправлен: 30.10.2007, 14:53
Вопрос задал: Сваленский Дмитрий Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mihail Yarlykov
Здравствуйте, Сваленский Дмитрий Александрович!
Вы создаёте приложение Win32, а оно должно иметь функцию WinMain в качестве точки входа. Вы же применяете старую функцию main.
Прототип функции:
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);

Заменяем функцию void main() на:
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,
LPSTR lpcmdline, int ncmdshow){ ..... }
---------
Нет ничего невозможного!
Ответ отправил: Mihail Yarlykov (статус: 4-ый класс)
Ответ отправлен: 30.10.2007, 17:49
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо за ответ, именно в этом и заключалась моя ошибка!!!


Вопрос № 107.385
Добрый день. Я новичек. Нужна помощь. Есть форма 1, в которой 2 кнопки, как сделать так, чтобы при нажатии 1-й кнопки осуществлялся преход к форме 2, причем формы 1 видно бы не было и также с помощью кнопки назад на форме 2 можно было бы перейти обратно к форме 1, ну и по аналогии такая же схема и ко 2-й кнопке на форме 1. Заранее спасибо.
Отправлен: 30.10.2007, 15:39
Вопрос задал: Isaev Den (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архипов Александр Леонидович
Здравствуйте, Isaev Den!
Перед открытием формы методом Show, надо скрыть текущую форму методом Hide.
Например:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Hide();
Form2->Show();
}

Приложение:

Ответ отправил: Архипов Александр Леонидович (статус: 7-ой класс)
Ответ отправлен: 31.10.2007, 09:29
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо. Обязательно сегодня попробую так сделать.

Отвечает: Чернов С.В.
Здравствуйте, Isaev Den!
Предыдущий ответчик прав!
Только заметьте, что вы при открытой Form2 вы спокойно можете получить доступ к Form1, чтобы избежать этого вместо Show пишите ShowModal, тогда пока вы не закроете Form2 вы не сможете получить доступ к Form1.
Тогда форму вы вызываете так Form2->ShowModal(); После выполнения действий в коде кнопки "Назад" пишете Form2->Close();
Ответ отправил: Чернов С.В. (статус: 1-ый класс)
Ответ отправлен: 31.10.2007, 10:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Обязательно учту этот немаловажный момент при написании программы.


Вопрос № 107.390
Добрый вечер уважаемые эксперты.Прошу у вас помощи в решении задачки.
Найти минимум функции x(в квадрате)+e(в степени -X) методом дихотомии.
Отправлен: 30.10.2007, 16:59
Вопрос задал: Pimp (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: V1s0r
Здравствуйте, Pimp!

http://subscribe.ru/archive/science.exact.math/200307/10003600.html
да и вообще google.ru нашёл пару тысяч ссылок
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 30.10.2007, 17:11


Вопрос № 107.396
Драсьте уважвемые эксперты!
Помогите с кодом програмулины.
Дан двумерный массив. Необходимо развернуть его на или 90 градусов по часовой стрелке.
Заранее благодарен за ответ, Саша.
Отправлен: 30.10.2007, 17:28
Вопрос задал: Ivanischev Alexander Konstantinovich (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Ivanischev Alexander Konstantinovich!

Если Вы внимательно посмотрите, то при повороте массива размера n на 90 по часовой происходит циклическая перестановка элементов:
[y][x] -> [x][n-1-y] -> [n-1-y][n-1-x] -> [n-1-x][y] -> [y][x]
Т.е. нам нужно просто реализовать эту перестановку для верхней левой четверти массива.
Трудность возникает при нечётных n. Тогда одна координата должна меняться до (n+1)/2, а вторая до (n-1)/2. Будем менять до (n+1)/2 координату x.
Используя то, как в С реализовано целочисленное деление мы должны ввести предел (n+1)/2 для х и n/2 для y. Итого,
for(int y = 0; y < n/2; ++y)
{
for(int x = 0; x < (n+1)/2; ++x)
{
int tmp = array[y][x];
array[y][x] = array[n-1-x][y];
array[n-1-x][y] = array[n-1-y][n-1-x];
array[n-1-y][n-1-x] = array[x][n-1-y];
array[x][n-1-y] = tmp;
}
}

На всякий случай проверьте.
Ответ отправил: Воробьёв Алексей Викторович (статус: 5-ый класс)
Ответ отправлен: 30.10.2007, 19:00

Отвечает: CruelHity
Здравствуйте, Ivanischev Alexander Konstantinovich!
Вот еще один вариант со вторым массивом!
См приложения! Будут вопросы спрашивайте))))
Удачи!

Приложение:

Ответ отправил: CruelHity (статус: 3-ий класс)
Ответ отправлен: 30.10.2007, 19:03

Отвечает: Архипов Александр Леонидович
Здравствуйте, Ivanischev Alexander Konstantinovich!
Если есть массив x[n][m] и его надо привести к y[m][n] с поворотом первого на 90 градусов по часовой, то делается это в двух вложенных циклах
for (int i=0; i<m; i++)
for (int k=0; k<n; k++)
y[k][i] = x[i][k]
Ответ отправил: Архипов Александр Леонидович (статус: 7-ой класс)
Ответ отправлен: 31.10.2007, 09:46


Вопрос № 107.403
Уважаемые эксперты, помогите пожалуйста решить!
Нужно составить программу, которая содержит информацию о сотрудниках. Сведения:
-фамилия;
-стаж работы;
-пол;
-год рождения;
-адрес;
Программа должна обеспечить:
-поиск и распечатку данных о сотрудниках со стажем работы не менее 5 лет;
-изменение данных о сотрудника;
-удаление элементов (заданных);
-сортировку данных;
-вывод всего списка.

#include <iostream.h>
#include <string.h>
#include <stdio.h>

struct TData
{
char Surname [20];
unsigned int Staj;
int Pol;
int Year;
int Adres;

};

struct TRep
{
TData Data;
TRep * Next;
};

TRep * First = NULL;
unsigned int Staj = 5;

TRep * Find (char * Surname)
{
TRep * Current = First;
do
{
if (strcmp (Current->Data.Surname, Surname) == 0) return Current;
Current = Current->Next;
}
while (Current != First);
return NULL;
}

TRep * Prev (TRep * Elem)
{
TRep * Current = First;
while (Current->Next != Elem)
Current = Current->Next;
return Current;
}

void Show ()
{
char Surname [20];
cout<<"Enter a surname of a worker for finding: "; cin>>Surname;
TRep * Current = Find (Surname);
if (Current)
{
cout<<" Surname of a worker: "<<Current->Data.Surname;
cout<<" Staj of work: "<<Current->Data.Staj;
cout<<" Pol of a worker: "<<Current->Data.Pol;
cout<<" ";
}
else cout<<" Element not found. ";
}

void Del ()
{
char Surname [20];
cout<<"Enter a surname of a worker for finding: "; cin>>Surname;
TRep * Current = Find (Surname);
if (Current)
{
TRep * Previus = Prev (Current);
if (First == First->Next) First = NULL;
Previus->Next = Current->Next;
if (Current == First) First = Previus->Next;
cout<<" Surname of a worker "<<Current->Data.Surname<<" was deleted. ";
delete Current;
}
else cout<<" Element not found. ";
}

int AddFor (TData Data)
{
TRep * NewRecord = new TRep;
NewRecord->Data = Data;

if (NewRecord->Data.Staj < Staj)
{
if (First == NULL)
{
First = NewRecord;
NewRecord->Next = NewRecord;
}
else
{
TRep * Current = First;
do
{
if (strcmp (Current->Data.Surname, NewRecord->Data.Surname) > 0) break;
Current = Current->Next;
}
while (Current != First);

TRep * Previus = Prev (Current);
Previus->Next = NewRecord;
NewRecord->Next = Current;
if (Current == First)
if (strcmp (Current->Data.Surname, NewRecord->Data.Surname) > 0) First = NewRecord;
}
return 1;
}
else
{
delete NewRecord;
cout<<" Element wasn't added Staj wery big. ";
return 0;
}
}

void Add ()
{
TData Data;
cout<<"Enter Surname of a worker: "; cin>>Data.Surname;
cout<<"Enter Staj of a worker: "; cin>>Data.Staj;
cout<<"Enter Pol of a worker: "; cin>>Data.Pol;
if (AddFor (Data) == 1) cout<<" Surname "<<Data.Surname<<" was added. ";
}

void ShowAll ()
{
TRep * Current = First;
if (Current)
{
do
{
cout<<"Surname of a worker: "<<Current->Data.Surname;
cout<<" Staj of a worker: "<<Current->Data.Staj;
cout<<" Pol of a worker: "<<Current->Data.Pol;
cout<<" ";
Current = Current->Next;
}
while (Current != First);
}
else
cout<<"Qulul is empty. ";
}

int Quant ()
{
TRep * Current = First;
int quant = 0;
if (Current)
{
do
{
quant++;
Current = Current->Next;
}
while (Current != First);
}
return quant;
}

void FRd ()
{
FILE * aFile = fopen ("file.dat","rb");
if (aFile)
{
TData Data;
int quant = 0;
fread (&quant, 1, sizeof (int), aFile);
for (quant; quant > 0; quant--)
{
fread (&Data, 1, sizeof (TData), aFile);
AddFor (Data);
}
}
else
{
FILE * bFile = fopen ("file.dat", "wb");
}
fcloseall ();
}

void FWt ()
{
FILE * aFile = fopen ("file.dat","wb");
int quant = Quant ();
fwrite (&quant, 1, sizeof (int), aFile);
for (quant; quant > 0; quant--)
{
fwrite (&First->Data, 1, sizeof (TData), aFile);
TRep * Previus = Prev (First);
if (First == First->Next) First = NULL;
Previus->Next = First->Next;
delete First;
First = Previus->Next;
}
fclose (aFile);
}

void main ()
{
FRd ();
int menu = 0;
while (menu!=5)
{
cout<<" Menu 0. Change max staj of a worker. 1. Add surname of a worker. 2. Delete surname of a worker. 3. Show surname of a worker. 4. Show all surnames of workers. 5. Exit. What do you want: ";
cin>>menu; cout<<" ";
switch (menu)
{
case 0: cout<<"Enter new Staj: "; cin>>Staj; cout<<" "; break;
case 1: Add (); break;
case 2: Del (); break;
case 3: Show (); break;
case 4: ShowAll (); break;
case 5: break;
deafault: cout<<"Incorrect input. Repeat. ";
}
}
FWt ();
}
Отправлен: 30.10.2007, 17:59
Вопрос задала: Svetapestova (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Svetapestova!

Вы что, пишете в слепую, без среды? Вы, тогда, гений!!! Ваша программа не компилилась, но требовала всего лишь 3 исправления:
1. #include <iostream> а не <iostream.h>
2. Нужно включать namespace:
using namespace std;
3. Опечатка в default.
Я особо не рассматривал, но есть ошибки. Я, например, попробовал действия 0 и 2.
0 сохраняет в какую-то локальную переменную, а должен созранять в First->Staj.
2 если нажать без предварительного добавления, то приводит к ошибке в методе Find, потому что First = NULL, а Вы пытаетесь сравнивать с Current->Data.Surname, где Current = First = NULL.
Я не очень понял, зачем Вам надо, чтобы последний элемент списка указывал на первый. По-моему лучше, чтобы он указывал на NULL, тогда цикл в Find, например, был бы проще:
for(TRep * Current = First; Current != NULL; Current = Current->Next)
{
if(strcmp (Current->Data.Surname, Surname) == 0)
{
break;
}
}
return Current;
Если это Вам нужно для удаления, то можно сначала проверить, что Current != First, а потом вызывать Prev.
Возможно, что есть и другие недочёты, но лучше, чтобы Вы подебаггили сами и спросили конкретные вопросы.

Приложение:

Ответ отправил: Воробьёв Алексей Викторович (статус: 5-ый класс)
Ответ отправлен: 30.10.2007, 19:33


Вопрос № 107.426
Я сидел с часу до 6 пытаяся понять, как переменную из одного класса засунуть в другой. Помогите пожалуйста.

Приложение:

Отправлен: 30.10.2007, 20:48
Вопрос задал: 12gty67kvp
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: SiRuS
Здравствуйте, !
Вам никто не мешает написать ф-ции-члены для обоих классов, возвращающие нужный вам класс. Ну или отдельную переменную класса.
Ответ отправил: SiRuS (статус: 3-ий класс)
Ответ отправлен: 30.10.2007, 22:37

Отвечает: Rockie
Здравствуйте, 12gty67kvp!

Можно было бы выложить свои попытки в коде, раз вы говорите что пытались :)

Засунуть объект класса можно точно также, как и другую переменную:

// реализация класса A
class A{
};

// реализация класса B, переменная типа A в классе B
class B{
public:
A a;
};

int main()
{
return 0;
}
Но нужно иметь ввиду, что реализация класса А должна быть известна
компилятору заранее. То есть если вы напишете такой код:

class A;

// реализация класса B, переменная типа A в классе B
class B{
public:
A a;
};

// реализация класса A
class A{
};

то вы получите ошибку C2079. Решить эту проблему можно, если инициализировать класс A заранее(вынести его в
H файл и делать include).

p.s.: А вообще, постарайтесь задавать вопрос конкретнее, тогда и вам быстрее помогут. Вот вам ссылка по теме:
"Как правильно задавать вопросы", статья
http://bugtraq.ru/forum/faq/general/smart-questions.html
Ответ отправил: Rockie (статус: 5-ый класс)
Ответ отправлен: 01.11.2007, 10:38


Вопрос № 107.433
надо сделать программку в MFC AppWizard(exe).там ее над сделать большую ну мне хотяб для примера...2 акошка Edit text и кнопка и чтоб при нажатии на кнопку число из 1 окошка умножалость на 2 и выводилось во 2 акошке.

Вот мне хотяб узнать как енто делаецо.

Приложение:

Отправлен: 30.10.2007, 21:59
Вопрос задал: Артемьев Артем Николаевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: CruelHity
Здравствуйте, Артемьев Артем Николаевич!
Вообще способов очень много! Например через мастера можно присвоить к переменым CEditBox значение int! Потом просто умножаете их и выводите спомощью функции SetWindowText!

в приложении пример(при нажатии кнопки) когда я создал на для этих двух окошкек control переменые(через master Wizard). Думаю как с мастером работать вас учить не надо! Но если что спрашиваете!
Удачи!

Приложение:

Ответ отправил: CruelHity (статус: 3-ий класс)
Ответ отправлен: 30.10.2007, 22:19
Оценка за ответ: 4


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное