sopik Опубликовано 7 июня, 2010 Жалоба Поделиться Опубликовано 7 июня, 2010 3) На плоскости задана декартова прямоугольная система координат. Указать точки плоскости, соответствующие элементам отношения R на множестве N, если R = {(x,y) | x =< 6, y =< 4, x > y}. Найти обратное отношение R–1, его область определения и область значений. помогите решить это задание Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 7 июня, 2010 Жалоба Поделиться Опубликовано 7 июня, 2010 (изменено) sopik: var x,y:byte;beginfor x:=1 to 6 do for y:=1 to 4 do if x>y then write('(',x,',',y,') '); writeln; writeln;for x:=1 to 6 do for y:=1 to 4 do if x>y then write('(',y,',',x,') '); writeln; readln end. Печатает R и R-1. Область определения R-1: {1,2,3,4}, область значений {2,3,4,5,6}. Изменено 7 июня, 2010 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
sopik Опубликовано 8 июня, 2010 Жалоба Поделиться Опубликовано 8 июня, 2010 sopik: var x,y:byte;beginfor x:=1 to 6 do for y:=1 to 4 do if x>y then write('(',x,',',y,') '); writeln; writeln;for x:=1 to 6 do for y:=1 to 4 do if x>y then write('(',y,',',x,') '); writeln; readln end. Печатает R и R-1. Область определения R-1: {1,2,3,4}, область значений {2,3,4,5,6}. спасибо!!!!!!! тебе!!!!!!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 9 июня, 2010 Жалоба Поделиться Опубликовано 9 июня, 2010 (изменено) Здравствуйте, уважаемые форумчане! Снова нужна помощь :blush2: Задача по оптимизации. Решить задачу нелинейного программирования методом градиентного пуска. Условие: Решение необходимо выполнить на языке QBasic. Спасибо. Изменено 9 июня, 2010 пользователем Shadow TH Ссылка на комментарий Поделиться на другие сайты Поделиться
lolipop Опубликовано 9 июня, 2010 Жалоба Поделиться Опубликовано 9 июня, 2010 Сдравствуйте!Такая вот проблема с деревьями: создать дерево-формулу по постфиксной форме.информационное поле типа int.создать копию дерева в зеркальном отображении.вивести деревья на экран.вычислить значения формул для обоих деревьев. Рад был бы даже паре-тройке пунктов из перечисленного) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 июня, 2010 Жалоба Поделиться Опубликовано 9 июня, 2010 (изменено) Shadow TH: QBasic так QBasic... Дорогу ветеранам :) DEF fnfu = -4 * x1 + 8 * x2 - x1 * x1 - 1.5 * x2 * x2 + 2 * x1 * x2DEF fnp1 = -4 - 2 * x1 + 2 * x2: DEF fnp2 = 8 - 3 * x2 + 2 * x1CLS : e = .0001: a = .2: x1 = 0: x2 = 0: f0 = fnfu: f1 = f0 - 1DOIF f0 > f1 THEN f1 = f0: p1 = fnp1: p2 = fnp2: y1 = x1: y2 = x2 ELSE a = a / 2x1 = y1 + a * p1: x2 = y2 + a * p2: f0 = fnfuLOOP UNTIL ABS(a * p1) + ABS(a * p2) < ePRINT "x1="; x1, "x2="; x2, "f="; f0: END Через DEF записаны выражения для исходной формулы и ее частных производных. P.S. На всякий случай: при копировании текста программы QBasic нельзя переносить строки иначе, чем в тексте программы. Изменено 9 июня, 2010 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 10 июня, 2010 Жалоба Поделиться Опубликовано 10 июня, 2010 Спасибо :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 11 июня, 2010 Жалоба Поделиться Опубликовано 11 июня, 2010 (изменено) Здравствуйте, уважаемые форумчане! :D Снова нужна ваша помощь. Задание, как и в прошлый раз: Решить задачу нелинейного программирования методом градиентного спуска. Условие: Заранее, огромное спасибо. P.S: Извиняюсь, за даблпост, просто нужно было как-то тему апнуть, чтобы заметили наличие новых сообщений. Изменено 11 июня, 2010 пользователем Shadow TH Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 июня, 2010 Жалоба Поделиться Опубликовано 11 июня, 2010 (изменено) Shadow TH: Ну, это задание не в пример проще, на самом деле даже писать ничего не надо. Решение не существует - максимум равен бесконечности. Ежу ясно, что для глядящей вверх параболы для x1 максимум равен бесконечности. Вообще график заданной функции легко себе представить, это поверхность седла (правда, с уходящими в бесконечность краями). Жизни в мире с такой геометрией посвящена хорошая фантастическая повесть Приста "Опрокинутый мир", но это уже, пожалуй, оффтоп... Если надо отчитаться, то работу ежа можно поручить и программе... DEF fnfu = 6 * x1 + 2 * x1 * x1 - 2 * x2 - 2 * x2 * x2DEF fnp1 = 6 + 4 * x1: DEF fnp2 = -2 - 4 * x2CLS : e = .0001: a = .5: x1 = 1: x2 = 1: f0 = fnfu: f1 = f0 - 1DOIF f0 > f1 THEN f1 = f0: p1 = fnp1: p2 = fnp2: y1 = x1: y2 = x2 ELSE a = a / 2IF p1 > 1E+10 OR p2 > 1E+10 THEN PRINT "Maximum is infinity!": ENDx1 = y1 + a * p1: x2 = y2 + a * p2: f0 = fnfuLOOP UNTIL ABS(a * p1) + ABS(a * p2) < ePRINT "x1="; x1, "x2="; x2, "f="; f0: END Программа выдаст "Maximum is infinity!", что было ясно с самого начала. Изменено 11 июня, 2010 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 14 июня, 2010 Жалоба Поделиться Опубликовано 14 июня, 2010 DEF fnfu = 6 * x1 + 2 * x1 * x1 - 2 * x2 - 2 * x2 * x2DEF fnp1 = 6 + 4 * x1: DEF fnp2 = -2 - 4 * x2CLS : e = .0001: a = .5: x1 = 1: x2 = 1: f0 = fnfu: f1 = f0 - 1DOIF f0 > f1 THEN f1 = f0: p1 = fnp1: p2 = fnp2: y1 = x1: y2 = x2 ELSE a = a / 2IF p1 > 1E+10 OR p2 > 1E+10 THEN PRINT "Maximum is infinity!": ENDx1 = y1 + a * p1: x2 = y2 + a * p2: f0 = fnfuLOOP UNTIL ABS(a * p1) + ABS(a * p2) < ePRINT "x1="; x1, "x2="; x2, "f="; f0: END Программа выдаст "Maximum is infinity!", что было ясно с самого начала. Такой вопрос, переменная а откуда вычисляется? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 июня, 2010 Жалоба Поделиться Опубликовано 14 июня, 2010 (изменено) a - это шаг, начальное значение - начальный шаг, у меня выбрано 0,5. Выбирается, как и начальная точка, более или менее произвольно, его величина особого значения не имеет, поскольку в дальнейшем автоматически корректируется. Идея метода такая: мы считаем направление градиента в точке и делаем шаг в этом направлении. Если в новой точке результат улучшился (ветвь THEN), то все в порядке, вычисляем градиент в новой точке и делаем следующий шаг. Если результат ухудшился (ветвь ELSE), значит, мы слишком перемахнули через максимум, в новую точку не переходим, а уменьшаем шаг вдвое и пробуем снова. Так и добираемся до максимума. Изменено 14 июня, 2010 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 14 июня, 2010 Жалоба Поделиться Опубликовано 14 июня, 2010 Понятненько. Спасибо за информацию. :D Ссылка на комментарий Поделиться на другие сайты Поделиться
Die_hard Опубликовано 16 июня, 2010 Жалоба Поделиться Опубликовано 16 июня, 2010 Здравствуйте, у меня вопрос по ассемблеру. Как с использованием функций сопроцессора (среда MASM, семейство x86)) вычислить значение следующего выражения: y=(x*e^x)/4. (в частности вычисления экспоненты и экспоненты в степени х) спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 18 июня, 2010 Жалоба Поделиться Опубликовано 18 июня, 2010 Может пишу не туда но все же. Я никак не могу разобраться с Односвязными списками. Мне нужна помощь с простенькой программой на C++. Программа должна делать различные операции со списком: 1 - Добавить в начало 2 - Добавить в конец 3 - Добавить на позицию 4 - Удаление с начала 5 - Удаление с конца 6 - Удаление с позиции 7 - Перевернуть список (я думаю тут нужно скопировать список в матрицу и потом циклом с конца матрицу записывать в список ) 8 - Подсчет кол-во Элементов 9 - Вывод списка 0 - Выход с программы Программа запускается в Borland Builder 6. p.s.(или хотя бы дайте ссылку на литературу) :) #include <iostream.h>#include <string.h>#include <conio.h>struct Elem{int a;Elem*next;};int main(){int pozic, kol;Elem*first=NULL;char knopka;do{ clrscr(); cout<<"1 - Dobavit v nachalo\n"; cout<<"2 - Dobavit v konec\n"; cout<<"3 - Dobavit na poziciy\n"; cout<<"4 - Ydalenie s nachala\n"; cout<<"5 - Ydalenie s konca\n"; cout<<"6 - Ydalenie s pozicii\n"; cout<<"7 - Perevernyt spisok\n"; cout<<"8 - Podschetat kolichestvo elementov\n"; cout<<"9 - Pokazat\n"; cout<<"0 - Exit\n"; knopka=getch(); switch(knopka) { case'1': { Elem*tmp=new Elem; cout<<"Vvedite chislo\n"; cin>>tmp->a; tmp->next=first; first=tmp; } break; case'2': { } break; case'3': { Elem*poz=new Elem; cout<<"Vvedite chislo:\n"; cin>>poz->a; cout<<"Vvedite Posle kakova elementa dobavit novui\n"; cin>>pozic; kol=0; Elem*cur=first; while(cur) { cur=cur->next; kol++; } if(kol==0) { cout<<"Spisok pust\n"; getch(); break; } while(kol<=pozic) { cout<<"Vu vveli chislo bolshe chem elementov v spiske\n"; cout<<"Vvedite drygoe\n"; cin>>pozic; } Elem*cur1=first; if(pozic<kol) { for(int i=0;i<pozic;i++) { cur1=cur1->next; } cout<<cur1->a; poz=cur1->next; cur1->next=poz; } getch(); } break; case'4': { if(first==NULL) { cout<<"Spisok pust\n"; getch(); break; } Elem*tmp=first; first=first->next; delete tmp; } break; case'5': { } break; case'6': { } break; case'7': { } break; case'8': { if(first==NULL) { cout<<"Spisok pust\n"; getch(); break; } kol=0; Elem*cur=first; while(cur) { cur=cur->next; kol++; } cout<<"V spiske "<<kol<<" elementov\n"; getch(); } break; case'9': { if(first==NULL) { cout<<"Spisok pust\n"; getch(); break; } cout<<"\nSpisok:\n"; Elem*cur=first; while(cur) { cout<<cur->a<<"\n"; cur=cur->next; } getch(); } break; }}while(knopka!='0');return 0;} Ссылка на комментарий Поделиться на другие сайты Поделиться
OGR Опубликовано 19 июня, 2010 Жалоба Поделиться Опубликовано 19 июня, 2010 Я один не увидел вопроса? Что требуется? Написать программу? Или разобраться в уже написанном коде? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 19 июня, 2010 Жалоба Поделиться Опубликовано 19 июня, 2010 (изменено) Dr0n4eG: Пока что обойдемся советами, тем более что полпрограммы написано. Списки можно реализовывать чуть ли не бесконечным количеством способов. Поэтому, кстати, от ссылок на литературу будет мало толка - в каждой книжке списки будут реализованы по-разному. Насколько я понял, полпрограммы работает, оставшиеся нереализованными функции связаны с возвратом по списку на одну позицию. В односвязном списке возвратиться назад сложно, поэтому при проходах по списку надо запоминать сразу два указателя - на предыдущую и на текущую запись - это ключ к решению таких проблем. Итак: Добавление в конец списка. Надо пройти по списку, запоминая указатель на предыдущую запись (для первой записи списка - NULL) и указатель на текущую. А дойдя до конца списка, удалить последнюю запись и скорректировать указатель предпоследней (занести в него NULL), благо указатель на нее остался. Удаление с начала. То же самое. Доходим до второй записи, корректируем указатель на начало списка на нее, а первую (при проходе мы запоминаем по два указателя, как и раньше) удаляем. Удаление с конца. Почти то же самое. Доходим до конца, последнюю запись удаляем, в предпоследней указатель на следующую запись корректируем на NULL. Удаление с позиции. То же самое. Доходим до нужной позиции, у нас "в руках" два указателя - на предыдущую запись и, в текущей записи - на следующую. Корректируем указатель предыдущей записи и удаляем текущую. Перевернуть список. Никаких дополнительных матриц - теряется весь смысл списка! Просто идем по списку и как бы удаляем каждую очередную запись, но не уничтожаем ее, а вставляем в начало списка - как уже было реализовано. Вот и все, замечу только, что мне не нравится идея обходиться без функций - в разных пунктах часто нужны одинаковые действия, их можно было бы выделить в отдельные функции, чтобы не повторяться. P.S. Перечитал и заметил, что не то наговорил в описании добавления в конец списка - описал не добавление, а удаление ;) Ну, код для добавления я приводил в следующем посте. Там вроде бы все понятно, есть только нюансик в добавлении к не существовавшему до сих пор списку, тогда надо присвоить еще значение указателю на начало списка. А существовал уже список или еще нет, можно узнать по значению этого указателя прежде - если он на что-то указывал, список уже был, если в нем ноль - списка не было. Изменено 19 июня, 2010 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 19 июня, 2010 Жалоба Поделиться Опубликовано 19 июня, 2010 Спасибо ;) теперь понял как доделать программу :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 19 июня, 2010 Жалоба Поделиться Опубликовано 19 июня, 2010 Что-то не получается добавление в конец списка ;) вроде все правильно а не работает... не пойму в чем ошибка. case'2': { Elem*kon=new Elem; Elem*cur=new Elem; cout<<"Vvedite chislo\n"; cin>>kon->a; while(cur) { cur=cur->next; } kon->next=cur->next; cur->next=kon; } break; Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 19 июня, 2010 Жалоба Поделиться Опубликовано 19 июня, 2010 (изменено) Dr0n4eG: case'2':{ tmp=new Elem; cur=first; Elem *pred=NULL; cout<<"Vvedite chislo\n"; cin>>tmp->a; tmp->next=NULL; while(cur){pred=cur; cur=cur->next;} if(first)pred->next=tmp; else first=tmp; }break; Изменено 19 июня, 2010 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Dr0n4eG Опубликовано 20 июня, 2010 Жалоба Поделиться Опубликовано 20 июня, 2010 Не как не пойму в чем проблема вроде бы все делаю правильно: запоминаю предпоследний и последний элемент потом предпоследний указывает на конец а последний удаляю, но почему-то со списка не удаляется последний элемент :blush2: Вот этот кусок текста программы если кто видит ошибку подскажите. case'5': { Elem*tmp=new Elem; Elem*cur=first; Elem*pred=first; tmp->next=NULL; if(first==NULL) { cout<<"Spisok pust\n"; getch(); break; } while(cur) { pred=cur; cur=cur->next; pred->next=cur; } tmp=cur; pred->next=NULL; delete tmp; } Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 июня, 2010 Жалоба Поделиться Опубликовано 20 июня, 2010 Dr0n4eG: Что у тебя в cur после while(cur) ? На каком значении while умоет руки? Правильно, NULL, он же нуль. А в pred - последняя запись. Затем tmp=cur; pred->next=NULL; delete tmp; // уничтожать Ничто, конечно, занимательно, но безрезультатно... А C++ такой язык, что на все готов, и слова против не скажет :blush2: Не надо выходить за последнюю запись. case'5':{ if(first==NULL){cout<<"Spisok pust\n"; getch(); break;} Elem*pred=new Elem; pred=NULL; cur=first; // forward! while(cur->next){pred=cur; cur=cur->next;} delete cur; if(pred)pred->next=NULL; else first=NULL; cout<<"Done! Press Enter!\n"; getch(); }break; Опять пришлось специально корректировать first, если список превратился в ничто. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Фридрих Б@рб@росса Опубликовано 23 июня, 2010 Жалоба Поделиться Опубликовано 23 июня, 2010 Ктонить может составить програму для редактирования графики формата ddsx? (Например http://stronghold2rome.ucoz.ru/Barbarossa/anim.ddsx ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey2010 Опубликовано 3 июля, 2010 Жалоба Поделиться Опубликовано 3 июля, 2010 Пожалуйста помогите написать программу в Turbo Pascal: Сформировать строку, состоящую из нечетных слов исходной. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 3 июля, 2010 Жалоба Поделиться Опубликовано 3 июля, 2010 Sergey2010: var s,r:string; i:integer; b:boolean; begin readln(s); s:=' '+s; r:=''; b:=false;for i:=2 to length(s) do begin if(s[i-1]=' ')and(s[i]<>' ')then b:=not b; if b then r:=r+s[i] end;writeln®; readln end. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey2010 Опубликовано 3 июля, 2010 Жалоба Поделиться Опубликовано 3 июля, 2010 Помогите написать прогу на Паскале В каждой строке матрицы упорядочить по убыванию элементы, расположенные между минимальными и максимальным элементом строки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти