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

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


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

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

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

Здравствуйте, уважаемые форумчане! :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), значит, мы слишком перемахнули через максимум, в новую точку не переходим, а уменьшаем шаг вдвое и пробуем снова. Так и добираемся до максимума.

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

Здравствуйте, у меня вопрос по ассемблеру. Как с использованием функций сопроцессора (среда 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. Перечитал и заметил, что не то наговорил в описании добавления в конец списка - описал не добавление, а удаление ;)

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

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

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

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

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

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

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

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

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

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

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

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

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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



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