Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

3) На плоскости задана декартова прямоугольная система координат. Указать точки плоскости, соответствующие элементам отношения R на множестве N, если R = {(x,y) | x =< 6, y =< 4, x > y}. Найти обратное отношение R–1, его область определения и область значений.

помогите решить это задание

Ссылка на комментарий
Поделиться на другие сайты

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}.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

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}.

спасибо!!!!!!! тебе!!!!!!!!

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, уважаемые форумчане! Снова нужна помощь :blush2:

Задача по оптимизации. Решить задачу нелинейного программирования методом градиентного пуска.

Условие:

3FjPzu2.jpg

Решение необходимо выполнить на языке QBasic. Спасибо.

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

Сдравствуйте!Такая вот проблема с деревьями:

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

Рад был бы даже паре-тройке пунктов из перечисленного)

Ссылка на комментарий
Поделиться на другие сайты

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 нельзя переносить строки иначе, чем в тексте программы.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, уважаемые форумчане! :D

Снова нужна ваша помощь. Задание, как и в прошлый раз: Решить задачу нелинейного программирования методом градиентного спуска.

Условие:

4885b848.jpg

Заранее, огромное спасибо.

P.S: Извиняюсь, за даблпост, просто нужно было как-то тему апнуть, чтобы заметили наличие новых сообщений.

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

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!", что было ясно с самого начала.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

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!", что было ясно с самого начала.

Такой вопрос, переменная а откуда вычисляется?

Ссылка на комментарий
Поделиться на другие сайты

a - это шаг, начальное значение - начальный шаг, у меня выбрано 0,5. Выбирается, как и начальная точка, более или менее произвольно, его величина особого значения не имеет, поскольку в дальнейшем автоматически корректируется. Идея метода такая: мы считаем направление градиента в точке и делаем шаг в этом направлении. Если в новой точке результат улучшился (ветвь THEN), то все в порядке, вычисляем градиент в новой точке и делаем следующий шаг. Если результат ухудшился (ветвь ELSE), значит, мы слишком перемахнули через максимум, в новую точку не переходим, а уменьшаем шаг вдвое и пробуем снова. Так и добираемся до максимума.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте, у меня вопрос по ассемблеру. Как с использованием функций сопроцессора (среда MASM, семейство x86)) вычислить значение следующего выражения:

y=(x*e^x)/4. (в частности вычисления экспоненты и экспоненты в степени х)

спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Может пишу не туда но все же. Я никак не могу разобраться с Односвязными списками. Мне нужна помощь с простенькой программой на 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;}
Ссылка на комментарий
Поделиться на другие сайты

Я один не увидел вопроса? Что требуется? Написать программу? Или разобраться в уже написанном коде?

Ссылка на комментарий
Поделиться на другие сайты

Dr0n4eG:

Пока что обойдемся советами, тем более что полпрограммы написано. Списки можно реализовывать чуть ли не бесконечным количеством способов. Поэтому, кстати, от ссылок на литературу будет мало толка - в каждой книжке списки будут реализованы по-разному.

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

Итак:

Добавление в конец списка. Надо пройти по списку, запоминая указатель на предыдущую запись (для первой записи списка - NULL) и указатель на текущую. А дойдя до конца списка, удалить последнюю запись и скорректировать указатель предпоследней (занести в него NULL), благо указатель на нее остался.

Удаление с начала. То же самое. Доходим до второй записи, корректируем указатель на начало списка на нее, а первую (при проходе мы запоминаем по два указателя, как и раньше) удаляем.

Удаление с конца. Почти то же самое. Доходим до конца, последнюю запись удаляем, в предпоследней указатель на следующую запись корректируем на NULL.

Удаление с позиции. То же самое. Доходим до нужной позиции, у нас "в руках" два указателя - на предыдущую запись и, в текущей записи - на следующую. Корректируем указатель предыдущей записи и удаляем текущую.

Перевернуть список. Никаких дополнительных матриц - теряется весь смысл списка! Просто идем по списку и как бы удаляем каждую очередную запись, но не уничтожаем ее, а вставляем в начало списка - как уже было реализовано.

Вот и все, замечу только, что мне не нравится идея обходиться без функций - в разных пунктах часто нужны одинаковые действия, их можно было бы выделить в отдельные функции, чтобы не повторяться.

P.S. Перечитал и заметил, что не то наговорил в описании добавления в конец списка - описал не добавление, а удаление ;)

Ну, код для добавления я приводил в следующем посте. Там вроде бы все понятно, есть только нюансик в добавлении к не существовавшему до сих пор списку, тогда надо присвоить еще значение указателю на начало списка. А существовал уже список или еще нет, можно узнать по значению этого указателя прежде - если он на что-то указывал, список уже был, если в нем ноль - списка не было.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Что-то не получается добавление в конец списка ;) вроде все правильно а не работает... не пойму в чем ошибка.

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;
Ссылка на комментарий
Поделиться на другие сайты

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;
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Не как не пойму в чем проблема вроде бы все делаю правильно: запоминаю предпоследний и последний элемент потом предпоследний указывает на конец а последний удаляю, но почему-то со списка не удаляется последний элемент :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;		}
Ссылка на комментарий
Поделиться на другие сайты

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, если список превратился в ничто.

Ссылка на комментарий
Поделиться на другие сайты

Ктонить может составить програму для редактирования графики формата ddsx?

(Например http://stronghold2rome.ucoz.ru/Barbarossa/anim.ddsx )

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Пожалуйста помогите написать программу в Turbo Pascal: Сформировать строку, состоящую из нечетных слов исходной.

Ссылка на комментарий
Поделиться на другие сайты

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. 
Ссылка на комментарий
Поделиться на другие сайты

Помогите написать прогу на Паскале

В каждой строке матрицы упорядочить по убыванию элементы, расположенные между минимальными и максимальным элементом строки.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...