Вход

Решение задач на C\C++

Научись общаться с машиной и научи других. Все вопросы связанные с программированием и разработкой программ.

Модератор: AxeL

В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
26 ноября 2008 в 17:17

что б решения задач для С/С++ и паскаля не путать в одной теме решил создать отдельную тему. Ну вот и собственно по традиции первая программа Hello world! (:
[code:1]
#include <stdio.h>

int main() {

printf("Hello world");

return 0;
}
[/code:1]
0

СообщениеНовичок NeFr0n NeFr0n 0
Оставил 28 сообщений с 05 июл 2007
ФР: 2519
26 ноября 2008 в 22:10

что-то смысл темы несеку =\
PS сортировка массива "пузырьком"
[code:1]
#include <iostream>
#define MAX 10
using namespace std;
int main(){
int masiv[MAX];
for (int i=0;i<MAX;i++)
cin>>masiv[i];
for (int i=0;i<MAX;i++)
for (int j=0;j<MAX;j++)
if (masiv[i]<masiv[j]) {
int t=masiv[i];
masiv[i]=masiv[j];
masiv[j]=t;
}
for (int i=0;i<MAX;i++)
cout<<masiv[i];
return 0;
}
[/code:1]
0
Пишу регулярно

СообщениеПишу регулярно WidSeeN WidSeeN -1
Оставил 391 сообщений с 11 дек 2007
ФР: 3546
9 декабря 2008 в 23:10

Народ чиркните плиз что в этой проге сделать надо?
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

void getsqrRoot (char* buff, int x);
int main(int argc, char** argv)
{
int x;
char buff[30];
cout<<"Enter a number : ";
cin >> x;
getSqrRoot (buff, x);
cout << buff;
getch();
return 0;
}
void getSqrRoot (char* buff, int x)
{
sprintf(buff, "The square root iss %f", sqrt(x));

}
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
10 декабря 2008 в 15:25

Кароче читает число "X" и в строку "buff" переносит поциферно его корень в строку с фразой "The square root is..." ;-)
Я бы наверно написал что то вроде этого:
[code:1]#include <stdio.h> //стандартный ввод вывод
#include <string.h> //функции связанные со строками

int x;//Если хочешь чтоб х не был целым числом то замени на "double x;" и при вводе/выводе %lf вместо %d
char buff[30];
void getSqrRoot(char *buff,int x) {
sprintf(buff,"The square root iss %d",sqrt(x)); //переводит число x в строку buff
}

int main() {
printf("Enter a number");
scanf("%d\n",&x); //читаем Х
getSqrRoot(buff,x);
puts(buff); //выводим число как строку
return 0;
}

[/code:1]
0
Пишу регулярно

СообщениеПишу регулярно WidSeeN WidSeeN -1
Оставил 391 сообщений с 11 дек 2007
ФР: 3546
10 декабря 2008 в 17:51

Спасиб за пояснения так как тока начал разбираться в Borland C++ :-)
А что делает это программа в чём её смысл?
Можешь плиз объяснить если не тяжело, что каждая из сторок значит?
#include <iostream.h>
#include <conio.h>
#include <math.h>
#pragma hdrstop

и еще вопросик что лучше для тебя MS C++ или Borland C++?
0
Продвинутый

СообщениеПродвинутый Dm[X] Dm[X] 0
Оставил 589 сообщений с 18 авг 2006
ФР: -15023
ICQ
11 декабря 2008 в 16:49

WidSeeN, лучше MS C++ так как довольно шустрый и к тому же
признанный лидер-разработчик.
Например, MVC9 создает в 2,5раза более быстрый код, чем компилятор lcc
И по размерам 2500 байт простейшая прога притив более чем 100kb
(компилировался один и тот же исходник!)

добавлено спустя 5 минут:

Недостаток MVC в том, что много надо тянуть из инета более ГИГА
(MVC+Platform SDK+MASM32) :-D
0

Сообщение [Rand] 11 декабря 2008 в 19:00

А еще лучше в учебных целях использовать интерпретатор C++ >>
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
11 декабря 2008 в 22:10

WidSeeN,
#include <iostream.h>
Библиотека ввода\вывода на сколько помню
#include <math.h>
Библиотека с математическими функциями

остальное не могу сказать...

Я программирую на MS Visual С++ 2008 борладн С++ что то мне не особо нравится... Хотя... на вкус и цвет... ;)
0
Продвинутый

СообщениеПродвинутый Dm[X] Dm[X] 0
Оставил 589 сообщений с 18 авг 2006
ФР: -15023
ICQ
11 декабря 2008 в 22:20

Линкер у меня выдавал 12 ошибок, пока я не прописал директорию для либов
Еще добавил libctiny, сейчас всего пара ошибок осталась до создания exe

Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

paq8o8.obj : error LNK2019: unresolved external symbol _train referenced in function "public: void __thiscall Mixer::update(void)" (?update@Mixer@@QAEXXZ)
paq8o8.obj : error LNK2019: unresolved external symbol _dot_product referenced in function "public: int __thiscall Mixer::p(void)" (?p@Mixer@@QAEHXZ)
paq8o8.exe : fatal error LNK1120: 2 unresolved externals

Вот кусочек кода этого миксера :)

//////////////////////////// Mixer /////////////////////////////

// Mixer m(N, M, S=1, w=0) combines models using M neural networks with
// N inputs each, of which up to S may be selected. If S > 1 then
// the outputs of these neural networks are combined using another
// neural network (with parameters S, 1, 1). If S = 1 then the
// output is direct. The weights are initially w (+-32K).
// It is used as follows:
// m.update() trains the network where the expected output is the
// last bit (in the global variable y).
// m.add(stretch(p)) inputs prediction from one of N models. The
// prediction should be positive to predict a 1 bit, negative for 0,
// nominally +-256 to +-2K. The maximum allowed value is +-32K but
// using such large values may cause overflow if N is large.
// m.set(cxt, range) selects cxt as one of 'range' neural networks to
// use. 0 <= cxt < range. Should be called up to S times such
// that the total of the ranges is <= M.
// m.p() returns the output prediction that the next bit is 1 as a
// 12 bit number (0 to 4095).

// dot_product returns dot product t*w of n elements. n is rounded
// up to a multiple of 8. Result is scaled down by 8 bits.

#ifdef NOASM // no assembly language
int dot_product(short *t, short *w, int n) {
int sum=0;
n=(n+7)&-8;
for (int i=0; i<n; i+=2)
sum+=(t[i]*w[i]+t[i+1]*w[i+1]) >> 8;
return sum;
}
#else // The NASM version uses MMX and is about 8 times faster.
extern "C" int dot_product(short *t, short *w, int n); // in NASM
#endif

// Train neural network weights w[n] given inputs t[n] and err.
// w[i] += t[i]*err, i=0..n-1. t, w, err are signed 16 bits (+- 32K).
// err is scaled 16 bits (representing +- 1/2). w[i] is clamped to +- 32K
// and rounded. n is rounded up to a multiple of 8.
#ifdef NOASM
void train(short *t, short *w, int n, int err) {
n=(n+7)&-8;
for (int i=0; i<n; ++i) {
int wt=w[i]+((t[i]*err*2>>16)+1>>1);
if (wt<-32768) wt=-32768;
if (wt>32767) wt=32767;
w[i]=wt;
}
}
#else
extern "C" void train(short *t, short *w, int n, int err); // in NASM
#endif

class Mixer {
const int N, M, S; // max inputs, max contexts, max context sets
Array<short, 16> tx; // N inputs from add()
Array<short, 16> wx; // N*M weights
Array<int> cxt; // S contexts
int ncxt; // number of contexts (0 to S)
int base; // offset of next context
int nx; // Number of inputs in tx, 0 to N
Array<int> pr; // last result (scaled 12 bits)
Mixer* mp; // points to a Mixer to combine results public:
Mixer(int n, int m, int s=1, int w=0);

// Adjust weights to minimize coding cost of last prediction
void update() {
for (int i=0; i<ncxt; ++i) {
int err=((y<<12)-pr[i])*7;
assert(err>=-32768 && err<32768);
if (err) train(&tx[0], &wx[cxt[i]*N], nx, err);
}
nx=base=ncxt=0;
}

// Input x (call up to N times)
void add(int x) {
assert(nx<N);
tx[nx++]=x;
}

// Set a context (call S times, sum of ranges <= M)
void set(int cx, int range) {
assert(range>=0);
assert(ncxt<S);
assert(cx>=0);
assert(base+cx<M);
cxt[ncxt++]=base+cx;
base+=range;
}

// predict next bit
int p() {
while (nx&7) tx[nx++]=0; // pad
if (mp) { // combine outputs
mp->update();
for (int i=0; i<ncxt; ++i) {
pr[i]=squash(dot_product(&tx[0], &wx[cxt[i]*N], nx)>>5);
mp->add(stretch(pr[i]));
}
mp->set(0, 1);
return mp->p();
}
else { // S=1 context
return pr[0]=squash(dot_product(&tx[0], &wx[0], nx)>>8);
}
}
~Mixer();
};

Mixer::~Mixer() {
delete mp;
}


Mixer::Mixer(int n, int m, int s, int w):
N((n+7)&-8), M(m), S(s), tx(N), wx(N*M),
cxt(S), ncxt(0), base(0), nx(0), pr(S), mp(0) {
assert(n>0 && N>0 && (N&7)==0 && M>0);
int i;
for ( i=0; i<S; ++i)
pr[i]=2048;
for ( i=0; i<N*M; ++i)
wx[i]=w;
if (S>1) mp=new Mixer(S, 1, 1, 0x7fff);
}

добавлено спустя 2 минуты:

Нарыл в инете: Это означает, что у тебя объявлена, но не определена функция.
Как исправить?
0
Пишу регулярно

СообщениеПишу регулярно WidSeeN WidSeeN -1
Оставил 391 сообщений с 11 дек 2007
ФР: 3546
11 декабря 2008 в 22:37

Unmoved, спасибо за ответ мб и мне на визуал начать :) а не подскажешь какой нибудь учебничек? :)
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
11 декабря 2008 в 22:47

WidSeeN, Хм я пользуюсь книгой "Айвор Хортон Visual C++ Базовый курс" :roll:
0
Продвинутый

СообщениеПродвинутый Dm[X] Dm[X] 0
Оставил 589 сообщений с 18 авг 2006
ФР: -15023
ICQ
12 декабря 2008 в 13:29

Снова хелло волд 8)
Книжки по си можно скачать здесь
http://forum.codeby.net/topic14324.html
Некоторые ссылки пока еще рабочие, просто некоторые пытаются защищать
авторское право, поэтому трудновато найти в электронном формате... :-D

добавлено спустя 2 часа 14 минут:

Оффтоп видел у одного программера в подписи следующее

class God : public ChuckNorris { };
Забавно :roll:
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
12 декабря 2008 в 18:33

Ребят мы тут начали "Записи" изучать в школе а я как заядлый Сшник не хочу на паскале писать поделитесь ссылкой на инфу! :)

Оффтоп

Dm[X] забавней выглядит

[code:1]#define FOREVER for(;;)[/code:1]

:-D
0
Пишу регулярно

СообщениеПишу регулярно WidSeeN WidSeeN -1
Оставил 391 сообщений с 11 дек 2007
ФР: 3546
13 декабря 2008 в 17:01

Ты в школе учишься? А чё за записи? :D и ещё у тебя именно книга Айвор Хортон Visual C++ Базовый курс? или электронный вариант?
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
13 декабря 2008 в 20:22

WidSeeN, Да, 11 класс заканчиваю :roll: Ну сложный тип данных тоесть можешь объявить
[code:1]
struct Hello {
char Name[10]='World\0';
int l;
}
struct Hello;
[/code:1]

и обращаешся в программе к примеру printf("%c",Hello.Name[5]);
и выведет 5 символ строки Name в структуре Hello :)
Вобщем что то вроде баз данных :)

У меня книга, не люблю электронную литературу. :roll:
0
Пишу регулярно

СообщениеПишу регулярно WidSeeN WidSeeN -1
Оставил 391 сообщений с 11 дек 2007
ФР: 3546
13 декабря 2008 в 22:31

Извини канешна, но в паскале я тебе не помошник :)
И как книга? доходчиво пишет?
Пишешь проги какие нибудь или пока нет?
И вот еще че за ошибка не знаешь?
Последний раз редактировалось WidSeeN Вт дек 16, 2008 15:19, всего редактировалось 1 раз.
0
Продвинутый

СообщениеПродвинутый Dm[X] Dm[X] 0
Оставил 589 сообщений с 18 авг 2006
ФР: -15023
ICQ
15 декабря 2008 в 23:19

WidSeeN, канешна знаю, это виновато кривое поделие
M$ NET.FrameWork. А самому гугл посмотреть лень?
visualstudio8setup error
А еще английской виндой пользуешься! Стыдно, товарисч :oops:
Даже поисковыми системами пользоватся не умеешь :-D
А еще можно минидамп в темпе профиля просмотреть...
0

СообщениеНовичок NeFr0n NeFr0n 0
Оставил 28 сообщений с 05 июл 2007
ФР: 2519
15 декабря 2008 в 23:26

Тоже как и Unmoved учил с++ (в основном MFC) по этой книге =) Ivor Horton VSC++ 2005 =)
ЗЫ среду использую - CodeBlock ,мне больше чем вижуал нравится .
0
Пишу регулярно

СообщениеПишу регулярно WidSeeN WidSeeN -1
Оставил 391 сообщений с 11 дек 2007
ФР: 3546
16 декабря 2008 в 15:18

Dm[X], ладно те умник(без обид) ты парень шаристый поздравляю.
Но не все же со знаниями виндовс родились.
Лучше напиши че сделать надо чтобы проблему решить :!:
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
17 декабря 2008 в 15:32

помогите плиз, только без стеба над нубом.
непонятны два цикла for.

[code:1]
len_word=0; // Длина слова
tek_poz; // Счётчик позиции в текущем слове
comb; // Кол-во символов в комбинации
len_comb=0; // Длина комбинации

//Проверка на содержание комбинации в слове
for (tek_poz=0; tek_poz<=len_word-len_comb; ++tek_poz)
{
for (comb=0; comb<len_comb; ++comb)
{
if (word[tek_poz+comb]!=combin[comb])
break;
}
if (comb==len_comb)
{
/* Если длина текущего слова больше МАКС, то переопределение МАКС слова и МАКС строки */
if (len_word>max_word)
{
max_word=len_word;
max_str=tek_str;
}
}
}

[/code:1]

я бы сделал по другому, но надо именно в цикле(((
0
Пишу регулярно

СообщениеПишу регулярно vdim vdim 0
Оставил 228 сообщений с 06 дек 2008
ФР: 1261
17 декабря 2008 в 23:22

glorden, как понял, надо найти строку, содержащую максимальное слово, которое в свою очередь содержит заданную комбинацию?..

во внешнем цикле идем по по слову (по каждой букве)... от этой буквы(word[tek_poz+comb]) во внутреннем цикле ищем искомую комбинацию. Если нашли, то будет comb=len_comb, поэтому зайдем в условие.
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
18 декабря 2008 в 10:16

да вы все правильно поняли.
Спасибо огромное за пояснение.
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
24 декабря 2008 в 00:20

ну-ка товарищи :)
расскажите мне такую штуку :) хз сколько времени на си не писал ничего дак и не помню уже.
в общем суть проблемы проста
допустим есть строка вида xxxAAAAA.yyy где вместо ААААА могут быть цифры.. но в принципе могут быть и буквы.
дак вот надо если это цифры то получить их.

в общем млин в пхп это решается одной строй с помощью функции ereg(); и никаких вобще проблем. в Си как то стандартном такого нет. Скачал библиотеку regex++ че то она какая то мудреная для моего мозга. (:

ваши предложения.
0
Бессмертный

СообщениеБессмертный laser laser 0
Оставил 12986 сообщений с 06 сен 2005
ФР: 17876
ICQ
24 декабря 2008 в 00:50

#include <regex>

using namespaceh std::tr1;


http://www.johndcook.com/cpp_regex.html
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
24 декабря 2008 в 08:41

teran, если тебе нужно тупо цифры то можешь сортировкой подсчетом а если тебе нужно число N'ной длины то попробуй найти первую цифру и проверяя последующий символ переводить в число умножая на 10 :)
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
24 декабря 2008 в 13:54

Unmoved, вы садист (:
вобще я спрашивал в основном про регулярные выражения конечно.
а то что вы написали гораздо проще сделать слегка другим образом. например
char *x = "xxxAAAAA.bbb";
StrToInt(String(x).copy(4,5));
в смысле это более простой способ выдрать цифры. имхо.
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
24 декабря 2008 в 16:53

teran, Есть немного)) способов вобще много просто написал первый который на ум пришел 8) также можно sprintf'ом обойтись если в хелпе покопаться :)
0
Бессмертный

СообщениеБессмертный laser laser 0
Оставил 12986 сообщений с 06 сен 2005
ФР: 17876
ICQ
24 декабря 2008 в 17:18

teran, чем тебя тр1 не устраивает??
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
24 декабря 2008 в 19:37

laser, я еще не прочитал мануал к тому что вы написали (:
0
Бессмертный

СообщениеБессмертный laser laser 0
Оставил 12986 сообщений с 06 сен 2005
ФР: 17876
ICQ
24 декабря 2008 в 20:16

teran писал(а):laser, я еще не прочитал мануал к тому что вы написали (:

какое громкое слово мануал =)


вот главные строчки:

std::tr1::cmatch res;
str = "<h2>Egg prices</h2>";
std::tr1::regex rx("<h(.)>([^<]+)");
std::tr1::regex_search(str.c_str(), res, rx);
std::cout << res[1] << ". " << res[2] << "\n";
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
24 декабря 2008 в 20:38

Мы тут в универе писали самостоятельную, там было такое задание:
[code:1]if (1<2==2) d=1 else d=0[/code:1]
Вопрос чему равно d?
Если честно я в ступоре был. Просто никогда такого не видел :shock: и как решать такое не представляю((

добавлено спустя 1 минуту:

ну только тупым не на называйте, я реально впервые столкнулся с таким. :-D
0
Почётный форумовец

СообщениеПочётный форумовец pixel pixel 0
Оставил 5937 сообщений с 24 янв 2004
ФР: 21596
ICQ
24 декабря 2008 в 20:53

glorden, разбирайтесь с приоритетами операций, а также с тем, что такое истина, и что -- ложь :) точнее, чему они равны

Вот так вот будет чуть понятнее:
[code:1]
if (1 < (2 == 2) ) d=1 else d=0
[/code:1]

2 == 2 --- истина. Насколько мне известно, истинное выражение... ** чешет репу, как правильно выразиться... в общем, true равно единице. Смотрим условие 1 < 1, оно ложно, значит, выполнится ветка d = 0.
0
Бессмертный

СообщениеБессмертный laser laser 0
Оставил 12986 сообщений с 06 сен 2005
ФР: 17876
ICQ
24 декабря 2008 в 21:06

pixel писал(а):2 == 2 --- истина. Насколько мне известно, истинное выражение... ** чешет репу, как правильно выразиться... в общем, true равно единице. Смотрим условие 1 < 1, оно ложно, значит, выполнится ветка d = 0.

по стандарту С:

"An rvalue of type bool can be converted to an rvalue of type int, with
false becoming zero and true becoming one"
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
24 декабря 2008 в 21:37

pixel писал(а):glorden, разбирайтесь с приоритетами операций, а также с тем, что такое истина, и что -- ложь :) точнее, чему они равны

Вот так вот будет чуть понятнее:
[code:1]
if (1 < (2 == 2) ) d=1 else d=0
[/code:1]

2 == 2 --- истина. Насколько мне известно, истинное выражение... ** чешет репу, как правильно выразиться... в общем, true равно единице. Смотрим условие 1 < 1, оно ложно, значит, выполнится ветка d = 0.

спасибо, мы уже тоже об этом думали (истина ложь), но как то странно все равно :?
залез на википедию, там написано - сначала выполняется < <= > >=, а затем выполняется == !=.
Значит в задаче сначала 1<2 сравниваем (ложь), а потом что делать??? сравнивать ложь с 2?? тут тогда вообще всегда ложь получается, бред какой-то.
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
24 декабря 2008 в 22:31

тут тогда вообще всегда ложь получается,

было бы интересно если бы иногда истина получалась да? (:
0
Почётный форумовец

СообщениеПочётный форумовец pixel pixel 0
Оставил 5937 сообщений с 24 янв 2004
ФР: 21596
ICQ
25 декабря 2008 в 00:32

залез на википедию, там написано - сначала выполняется < <= > >=, а затем выполняется == !=.

Я идиот, убейте меня кто-нибудь.

Значит в задаче сначала 1<2 сравниваем (ложь), а потом что делать??? сравнивать ложь с 2?

Угу.
0
В авторитете

СообщениеВ авторитете Unmoved Unmoved -2
Оставил 2590 сообщений с 02 июл 2006
ФР: 16989
WWWICQ
3 января 2009 в 13:41

if(1<(2==2))
1 сравнивается со скобкой а не с 2 так что pixel все правильно написал
1<1 /* т.к. (2==2) =1 */ - ложь => d всегда будет принимать значение 0
0

СообщениеНовичок BobbyBob BobbyBob 0
Оставил 6 сообщений с 24 окт 2008
ФР: 134
4 января 2009 в 17:40

разуй глаза, в исходной задаче скобок нету
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
16 января 2009 в 21:38

чувствую скоро мне потребуется отдельная тема (:
для начала вопрос маленькой.
как бы сделать так чтобы в рамках одного проекта скомпилировать не только исполняемый файл, но и ряд библиотек.
иначе говоря. есть проект главный модуль будет содержать описания родительских классов. хочу чтобы некоторые дочерние классы находились в отдельных библиотеках.
0
Скромный

СообщениеСкромный ViLPy ViLPy 0
Оставил 187 сообщений с 12 мар 2007
ФР: 9925
16 января 2009 в 23:32

teran, компилить библиотеки отдельно и потом линковать их к основному проекту как внешние. В рамках одного проекта в CodeBlocks решается посредством нескольких Build Target'ов в проекте (ну или нескольких проектов в одном Workspace). В MS VS разве что разными проектами в одном Solution'е (может и еще как-то, я знаю только этот способ).
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
17 января 2009 в 17:58

ну то что отдельно скомпилить это понятно можно.
а вобще по идее да, я уже подумывал что где то можно указать при линковке несколько целей.
в любом случае счас поковырял borlan cbuilder 2007 и как то ничего не нашел. видимо это все таки реализуется путем нескольких проектов в одной группе.
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
25 января 2009 в 23:18

как создать объект класса, если имя класса указано в переменной? :)
типа там string name = "user"; и теперь мне надо создать объект класса user.

добавлено спустя 1 час 12 минут:

вопрос номер 2. (:

есть допустим класс myClass
хочу map<string, myClass *> _objects;
ну и типа что нить потом _objects["asd"] = new myClass();
и тут где то явно ошибка (: как сделать правильно? суть думаю ясна что требуется.

ну и в дополнение вопрос 2.1
можно ли будет при этом map<string,myClass> x;
имея class myClass1 : myClass {} a1;
class myClass2 : myClass{} a2;
запиахть в x["first"] = new a1();
x["second"] = new a2();

добавлено спустя 8 часов 23 минуты:

вопрос снят.
коментарии:
1. можно использовать что то типа фабрик классов как называются они в некоторой литературе. если кто знает более хорошие пути то расскажите (:
2. странно что map<string,int> вроде как работает а map<string,myClass> нет. следует использовать map<string,myClass, class compare>, где последний класс реализует класс для сравнения ключей.
2.1 можно, указателю на родитель можно присвоить указатель на потомка. (не проверял просто на практике поэтому и спросил (: )
0

Сообщение logще 7 марта 2009 в 20:38

void постоянно пишет что это синтаксическая ошибка, и изза этого компилятор мне запарывает все проги с войдом, в чем проблема?
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
7 марта 2009 в 23:10

logще, исходник проивольный в виде примера в студию.
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
13 марта 2009 в 00:09

Помогите если сможете, мы с другом парились над этой задачей уже часов 8 в сумме. Задача простая - сделать транспонирование матрицы, матрицу надо взять из файла, из транспонированую запихать в файл.
Задача легкая, но так как никогда с Си++ не имели дела и лекции мало пересекаются с практикой - незнание синтаксиса порождают глупые ошибки.
Выкладываю два варианта наших кривых задач. :roll:

тут некоторые части в комменты убраны, так как пытались сначала без файла сделать:
[code:1]#include <stdio.h>
#include <stdlib.h>
void Transp(int, int, int, int);
int main (/*int argc, char *argv[]*/)
{
int i, j, n=3, m=3, c;
int** a;
int** at;

// FILE *fl=fopen (argv[1], "r");

a=new int*[m];
for (i=0,i<m,i++)
a[i]=new int[n];
at=new int*[n];
for (i=0,i<n,i++)
at[i]=new int[m];
printf('Vvedite massiv 3*3');
for (i=0, i<n, i++)
for (j=0, j<m, j++)
scanf ('%d',a[i][j]);
//while ((c=getchar())!=EOF)
/*if (c!=' ' && c!='\n')
a[i][j]=c;*/
//fclose(fl);
void Transp (int a[][], int at[][], int n,int m);
}
void Transp (int x[][], int xt[][], int k, int l)
{
int q,p;
for (q=0, q<k, q++)
for (p=0, p<l, p++)
xt[p][q]=x[q][p];
for (q=0, q<n, q++)
{
for (p=0, q<m, q++)
printf("%d ",xt[q][p]);
printf("\n");
}
}


[/code:1]


Это самый первоначальный наш вариант:
[code:1]#include <stdio.h>
#include <stdlib.h>
void Transp();
int main (int argc, char *argv[])
{
int i, j, n, m, c;

int** a;
int** at;
a=new int*[m];
for (i=0,i<m,i++)
a[i]=new int[n];
at=new int*[n];
for (i=0,i<m,i++)
at[i]=new int[m];
FILE *fl=fopen (argv[1], "r");
if (c=getchar ()) !='\n')
n=c;
if (c=getchar ()) !='\n')
m=c;
for (i=0, i<n, i++)
for (j=0, j<m, j++)
while (c=getchar()) !=EOF)

if (c!=' ' && c!='\n')
a[i][j]=c;
scanf
void Transp(int a[][], int at[][], int n,int m);
return 0;
}
void Transp (int x[][], int xt[][], int k, int l)
{
int q,p;
for (q=0, q<k, q++)
for (p=0, p<l, p++)
xt[p][q]=x[q][p];
for (q=0, q<n, q++)
{
for (p=0, q<m, q++)
printf("%d ",xt[q][p]);
printf("\n");
}
}
[/code:1]
ЗЫ: блин, я такой нуб в программировании, что даже стыдно :oops:
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
13 марта 2009 в 01:13

прокомментирую последние вариант ваш.
[code:1]
#include <stdio.h>
#include <stdlib.h>
void Transp(int, int, int, int);
[/code:1]
неверное объявление функции. (см. далее)
[code:1]
int main (/*int argc, char *argv[]*/)
{
int i, j, n=3, m=3, c;
int** a;
int** at;
[/code:1]
int** это что то новое, попробуйте int **a; и т.д.
[code:1]
// FILE *fl=fopen (argv[1], "r");

a=new int*[m];
for (i=0,i<m,i++)
a[i]=new int[n];
at=new int*[n];
for (i=0,i<n,i++)
at[i]=new int[m];
printf('Vvedite massiv 3*3');
[/code:1]
мелочь но все же. вводит массив надо m x n а не 3х3. да и не мешало бы требовать ввода тогда n & m хотя для начала хватит и без этого
[code:1]
for (i=0, i<n, i++)
for (j=0, j<m, j++)
scanf ('%d',a[i][j]);
//while ((c=getchar())!=EOF)
/*if (c!=' ' && c!='\n')
a[i][j]=c;*/
//fclose(fl);
[/code:1]
внимание стоит обратить на тот факт что при инициализации у вас написано a = new int[m] то есть первый индекс массива имеет диапазон 0-m. в цикле же вы вводите a[i][j] при этом i<n по условию цикла. чувствуете логичесую ошибку? хотя работать это будет, ибо элементы массива расплагаются друг за другом все.
а так же getchar считыает 1 байт из потока . то есть если у вас будет в строке написано 10 10 то это будет 1 0 пробле 1 и 0. а не 10 и 10.
[code:1]
void Transp (int a[][], int at[][], int n,int m);
}
[/code:1]
откуда такой вызов функции? вы же когда вызывали getchar() не указывали типы параметров? и тут никаикх отличий не будет.
Transp(a,at,n,m); и все.
[code:1]
void Transp (int x[][], int xt[][], int k, int l)
[/code:1]
что есть в вашем представлении int x[][] ? во первых в такой форме задаются статические массивы, во вторых они требуют указания размеров. у вас же массив вроде как динамический в каком то смысле. вы матрицы свои объявили как int **a; их вы передаете в функцию. и параметр функции значит должен быть именно такого типа.
void Transp(int **x, int **xt, int k, intl);
[code:1]
{
int q,p;
for (q=0, q<k, q++)
[/code:1]
чем вам тут так не угодили вполнеобычные i & j ? (: в прошлый раз они вам вроде подходили (: в смысле в main(). они там объявлены как локальные, область видимости предыдущих i&j в main ограничивается исключительно фунецией main.
так что здесь можно смело снова писать int i,j;
[code:1]
for (p=0, p<l, p++)
xt[p][q]=x[q][p];
for (q=0, q<n, q++)
{
for (p=0, q<m, q++)
printf("%d ",xt[q][p]);
printf("\n");
}
}

[/code:1]
'это же будет относится и к описанию функции вам никто не мешает оставить использование имен a & at.
то есть void Transp(int **a, int **at, int m, int n);
и если вы действительно хотите вывести матрицу потом, то следует воторой цикл привести к виду p=0;p<m;p++ (вложенный в смысле а не второй). при выводе.
тут кстати такие же ошибки что и при вводе когда первый параметр изменяется от 0 до n хотя задан как 0 - m.

в остальном вроде логично.
пробуйте пишите (:

добавлено спустя 4 минуты:

и еще заметочка такая небольшая (: разделителями в цикле for являются ";" а не запятая
то есть for(i=0;i<m;i++) И т.п.
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
13 марта 2009 в 10:59

спасибо, ошибки сам вижу глупейшие - чего стоит , вместо ;
ну и с двумерными массивами не работали еще. поэтому такие ошибки при вызове ф-и.
Будем работать.
0

Сообщение teran++ 13 марта 2009 в 13:40

ну как бы если что в for можно использовать запятые, только в другом свойстве как бы. запятая является разделителем списка. как вы например параметры в функции разделяете запятой.
так же можно и в циклах делать.
допустим можно написать что нить типа
for(int i=0, j=0;i<n;i++, j+=i)
таким образом вы в цикле определяете две переменных i & j и при каждой итерации будет выполнятся два действия i++ & j+=i;
хотя даже эту запись можно сократить то j+=++i; (:
0
Старик

СообщениеСтарик glorden glorden 0
Оставил 1092 сообщений с 11 май 2007
ФР: -16063
13 марта 2009 в 18:59

teran++ писал(а):ну как бы если что в for можно использовать запятые, только в другом свойстве как бы. запятая является разделителем списка. как вы например параметры в функции разделяете запятой.
так же можно и в циклах делать.
допустим можно написать что нить типа
for(int i=0, j=0;i<n;i++, j+=i)
таким образом вы в цикле определяете две переменных i & j и при каждой итерации будет выполнятся два действия i++ & j+=i;
хотя даже эту запись можно сократить то j+=++i; (:

да это я знаю, но в примере про матрицы это было грубейшей, детской ошибкой. (((
Сейчас буду переделывать прогу.
0
Легенда форума

СообщениеЛегенда форума teran teran 112
Оставил 6689 сообщений с 23 янв 2004
ФР: 149360
14 марта 2009 в 13:44

glorden, ну ты кидай следующий вариант потом (: сли работать не будет (:
0



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8