petrov7875 Публикувано Октомври 5, 2010 Report Share Публикувано Октомври 5, 2010 Как работи кода?Къде са грешките?Как да се поправят грешките?Как да се оптимизира кода? if (size < 0 || size > neuronsAmount) { throw( "ANN00023" ); return; } memcpy(output, neurons+neuronsAmount-size, sizeof(double)*size); Кодът е на C++ Това ми е дадено като домашно,но не мога да разбера какво прави този код.Плс кажете : )) БЛАГОДАРЯ ПРЕДВАРИТЕЛНО !!! Цитирай Link to comment Сподели другаде More sharing options...
dudev851 Публикувано Октомври 12, 2010 Report Share Публикувано Октомври 12, 2010 Значи този код проверява дали size е по-малко от нула или е по-голямо от neuronsAmount. Това може би проверява дали има грешка в стойността на size. И ако има вика функцията throw, с вх. параметър "ANN00023". И веднага след изпълнението на throw излиза от текущата функция. Не изпълнява нищо нататък.Но според мен това е в тялото на tryНещо като това:try { buf = new char[512]; if( buf == 0 ) throw "Memory allocation failure!"; } Ако е така значи има проверка дали тази големина size е по-малка от нула или е по-голяма от някаква граница neuronsAmount. И "хвърля" изключение(exception), което се прихваща от catch.За тези try throw catch прочети това: http://msdn.microsoft.com/en-us/library/6dekhbbc%28VS.80%29.aspx. memcpy(output, neurons+neuronsAmount-size, sizeof(double)*size); - output е адреса на първия байт от буфера, в който ще се прехвърлят данните. neurons+neuronsAmount-size е адреса на първия байт от буфера където са данните, които ще бъдат прехвърлени. sizeof(double)*size е размера на информацията(в байтове), която ще бъде прехвърлена.Един пример:char Name1[]="Sasho"; char Name2[]="Dimityr"; memcpy(Name2, Name1+2, 2);Като резултат в Name2 ще има shmityr. Като обобщение: тази част от кода проверява стойността на променливата, в която е записана големината на информацията, дали е коректна и ако е така - прехвърля. Ако не е - предава съобщение за грешка. Цитирай Link to comment Сподели другаде More sharing options...
petrov7875 Публикувано Октомври 12, 2010 Author Report Share Публикувано Октомври 12, 2010 Значи този код проверява дали size е по-малко от нула или е по-голямо от neuronsAmount. Това може би проверява дали има грешка в стойността на size. И ако има вика функцията throw, с вх. параметър "ANN00023". И веднага след изпълнението на throw излиза от текущата функция. Не изпълнява нищо нататък.Но според мен това е в тялото на tryНещо като това:try { buf = new char[512]; if( buf == 0 ) throw "Memory allocation failure!"; } Ако е така значи има проверка дали тази големина size е по-малка от нула или е по-голяма от някаква граница neuronsAmount. И "хвърля" изключение(exception), което се прихваща от catch.За тези try throw catch прочети това: http://msdn.microsoft.com/en-us/library/6dekhbbc%28VS.80%29.aspx. memcpy(output, neurons+neuronsAmount-size, sizeof(double)*size); - output е адреса на първия байт от буфера, в който ще се прехвърлят данните. neurons+neuronsAmount-size е адреса на първия байт от буфера където са данните, които ще бъдат прехвърлени. sizeof(double)*size е размера на информацията(в байтове), която ще бъде прехвърлена.Един пример:char Name1[]="Sasho"; char Name2[]="Dimityr"; memcpy(Name2, Name1+2, 2);Като резултат в Name2 ще има shmityr. Като обобщение: тази част от кода проверява стойността на променливата, в която е записана големината на информацията, дали е коректна и ако е така - прехвърля. Ако не е - предава съобщение за грешка. Благодаря !!!Доста работи научих от поста Ви ! : ) Как работи кода?Къде са грешките?Как да се поправят грешките?Как да се оптимизира кода? for (int j=0; j<neuronsAmount; j++) { for (int i=0; i<neuronsAmount; i++) { activities[j] = MAX_ACTIVITY; } } Учителят ни мъчи доста и сега ми е дал това :( (в момента изучаваме eзика C ,но ни дава домашни на C++ :X) Цитирай Link to comment Сподели другаде More sharing options...
Препоръчан пост
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.