nixp.ru v3.0

19 октября 2017,
четверг,
08:10:59 MSK

DevOps с компанией «Флант»
fatboy написал 24 июля 2004 года в 23:30 (428 просмотров) Ведет себя как мужчина; открыл 4 темы в форуме, оставил 11 комментариев на сайте.

Здравствуйте, уважаемые!

Помогите пож. разобраться с проблемой. Изучаю С++, прочитал об обработке исключений и о работе с аргументами проги при вызове ее из ком. строки. Так вот,

прочел и решил набросать обобщающий примерчик. В качестве задания выбрал банальное нахождение максимального эл-та матрицы.

Чтобы кратко и конкретно:

Найти максимум в матрице, размер которой задается, при вызове программы из ком. строки, в качестве аргументов.

При получении количесва аргументов не равного двум вывести сообщ. об ошибке и завершить программу.

В противном случае вывести значение максимума и его «координаты».

Я тут текст проги скинул… весь… не настолько я еще в С++ разбираюсь, чтобы понять в каком куске ошибка (собственно для этого и пишу).

Да, кстати, если размер задавать с терминала в процессе работы проги (типа: cout<<"Enter a: \n»; ) то работает.

cin>>cols;

cout<<"Enter b: \n»;

cin>>raws;

/* Looking for max element in matrix */

# include

# include

# include

using namespace std;

int main(int argc, char* argv[])

{

try

{

if(argc>=2)

throw «Too many arguments. Should be 2.\n»;

else if(argc==1)

throw «Too few arguments. Should be 2.\n»;

//————— all is OK ——————-

int cols, raws;

cols=atoi(argv[2]);

raws=atoi(argv[3]);

int matrix[cols+1][raws+1];

for(int i=0; i<=cols; i++)

{

for(int j=0; j<=raws; j++)

matrix[j]=j;

}

cout<<"Press any key to calculate.\n»;

getch();

int max=0;

int max_i, max_j;

for(int i=0; i<=cols; i++)

{

for(int j=0; j<=raws; j++)

{

if(matrix[j]>max)

{

max=matrix[j];

max_i=i;

max_j=j;

}

}

}

cout<<«\n»<<«————————--\n»

<<"Max element in matrix:\n»

<<max_i<<«,»<<max_j<<» = «<<max;

return 0;

} //-- try

//—————— if have trouble ——————--

catch(const char* er_msg)

{

cout<<"Error: «<<er_msg;

return 1;

}

}

компилил так:

g++ ./my1.cpp

Сообщения об ошибках:

home/fatboy/tmp/ccfneBYK.o(.text+0×123): In function `main’:

: undefined reference to `stdscr'

/home/fatboy/tmp/ccfneBYK.o(.text+0×128): In function `main’:

: undefined reference to `wgetch'

collect2: ld returned 1 exit status

Флаги компиляции -lncurses или -lcurses в BSD.

P.S. C++ тут ни при чем — исключение должно работать.

Uncle Theodore

1. На фига тебе curses? Для getch()? Замени на

char q;

cin >> q;

и убери curses хедер на фиг.

2. Пользуй iostream, а не iostream.h

3. if(argc>=2) <— Ты уверен? :-)

throw «Too many arguments. Should be 2.\n»;

else if(argc==1)

throw «Too few arguments. Should be 2.\n»;

Good Luck,

UT

Genie
cols=atoi(argv[2]);

raws=atoi(argv[3]);

int matrix[cols+1][raws+1];

а тут кто проверки будет делать на неправильные (нечисловые, неположительные) значения аргументов. понимаю, конечно, что «для собственного использования», но и это надо учитывать. ;) а то мало ли в каком состоянии прогу тестить будешь ;)

fatboy

1. if (argc>=2) тут, конечно, протупил :)

2. А какая разница как хидер использовать: iostream или iostream.h ?

fatboy

И еще один момент забыл, просто ради общего развития: как я понял виной всему curses…

Почему?

Вопрос по-моему довольно общий если нет желания можно не отвечать — не настаиваю :))

fatboy
1.    if (argc>=2)         тут, конечно, протупил :)

2.     А какая разница как хидер использовать: iostream  или  iostream.h ?

ANSI говорит использовать #include

Uncle Theodore
fatboy
И еще один момент забыл, просто ради общего развития: как я понял виной всему curses…

Почему?

Вопрос по-моему довольно общий если нет желания можно не отвечать — не настаиваю :))

Да, вопрос общий. curses ничему не виной, просто ты неверно используешь систему хедер + линкованная библиотека. В хедере декларируются функции, библиотеками они загружаются. Изучи этот вопрос. Вкратце, либо ты включаешь хедер curses И линкуешь объектный модуль с libncurses (libcurses), либо ты обходишься без них, поскольку они тебе, по большому счету, и не нужны.

Кстати, к обчеству. Я так понимаю, в русском языке принято произношение «хидер»? Забавно, поскольку в английском оригинале он «хедер», от «хед» — «голова». Ну, типа, заголовок. Дифтонг «ea» читается как «Э» также в «bread и spread». Что еще забавнее, это «flood», который народ упорно пишет как «флуд». Но ведь он же «флад», как «blood» = «блад»…

Good Luck,

UT

fatboy
Uncle Theodore
Кстати, к обчеству. Я так понимаю, в русском языке принято произношение «хидер»? Забавно, поскольку в английском оригинале он «хедер», от «хед» — «голова». Ну, типа, заголовок. Дифтонг «ea» читается как «Э» также в «bread и spread». Что еще забавнее, это «flood», который народ упорно пишет как «флуд». Но ведь он же «флад», как «blood» = «блад»…

Однако: heat[hi:t] — т.е. «хиит»

heap[hi:p] — т.е. «хиип»

Но это уже флейм :)

Uncle Theodore
fatboy
Однако: heat[hi:t] — т.е. «хиит»

heap[hi:p] — т.е. «хиип»

Но это уже флейм :)

Но heart = «харт»… :-)

В инглише, несмотря на то, чему учат в школах, практически нет правил произношения. Каждое слово пришло в этот синтетический язык со своим произношением и даже часто сос воей грамматикой (если грамматика была уж совсем уродской с точки зрения англосаксов, то слово стало неизменяемым, как cut, put и т.д).

И собстно, почему флейм? Обычно, народ, который интересуется программированием, находит лингвистические приколы забавными. Сходный стиль мышления.

Good Luck,

UT

vnp
Uncle Theodore
Но heart = «харт»… :-)

И собстно, почему флейм? Обычно, народ, который интересуется программированием, находит лингвистические приколы забавными. Сходный стиль мышления.

Good Luck,

UT

А я вот хотел «иа» в слове «theater» напомнить, поэтому вопрос: кто как передает «th» по-русски?

Genie

да нет, общие части всё же есть, а исключений — не так уж и много.

'ea' в зависимости от открытости/закрытости слога и звонкости последующего соглачного читается вполне по правилам ;)

это я помню.. потому как системой синтеза увлекался ;)

куда в этом плане страшнее русский. ууууу.

почти каждое слово сейчас произносится по индивидуальному правилу….

Но heart = «харт»… :-)

а тут и не дифтонг ;)

еще забавнее, это «flood», который народ упорно пишет как «флуд». Но ведь он же «флад», как «blood» = «блад»…

Ну да.. и book, food, foot, loop — они тож как blood читаются? :))))

Ага. разница — в 'l’.

Точнее в двубуквии согласная + 'l’. (и действительно, читается как flood…)

ну а th… да фик его знает. как звучит, так и читается..