Консультация № 70021
08.01.2007, 18:23
0.00 руб.
0 2 2
Плз помогите мне ещё раз!Мне надо решить до 21 00 ещё 3 программы!Заранее спс!
1)Работа со списками:
Вставить элемент e1 в односвязную очередь q, за каждым вхождением элемента e2
С весом w.
2)Построить график функции y=sin(10/x), Xmin=-5 Xmax=5;
Координаты графического окна(где будет размещён график): x1=0 y1=0 x2=400 y2=300!
3)По заданным значениям координат центра окружностей, радиуса R самой внутренней окружности и числа окружностей N нарисовать концентрические окружности и закрасить образуемые ими кольца разными цветами.

Обсуждение

Неизвестный
08.01.2007, 18:41
общий
это ответ
Здравствуйте, SHTEP!
На счет графика. Проверь почту!
Фича с окружностями см. приложение

Приложение:
procedure DrawEllipses(hCanvas:HDC; top, left, r0, r1, n:Integer; pallete:Longword);var diam, incr, i, x, y, d:Integer; ptr:Pointer; d:Integer;begin diam:=r1; incr:=((r1-r0) div n) shl 1; ptr:=GlobalLock(pallete); d:=r0 shl 1; x:=top; y:=left; d:=r1-(r1-r0) div n for i:=1 to n do begin Ellipse(hCanvas, x, y, x+diam, y+diam); FloodFill(hCanvas, x+(diam shr 1), y+(diam shr 1), Longword(Pointer(Longword(Ptr)+(i shl 2))^)); x:=x+d; y:=y+d; diam:=diam-incr; end;end;
Неизвестный
09.01.2007, 03:26
общий
это ответ
Здравствуйте, SHTEP!
Надеюсь, что с окружностью и графиком Вам уже помогли.
Попробую помочь со списком.
Давайте сразу определимся, что нам нужно в данном случае, а именно - значение элемента e1, т. о. задача сведется к обычной процедуре вставки элемента в список, в противном случае, мы не сможем корректно построить ссылки, т. к. никтьо не гарантировал, что элемент с весом w будет единственным.
Итак, вот что получается (если я не совсем правильно понял задание - уточните, что-нибудь придумаем).

Program ListInsert; {Вставка элемента в список}
type
PList=^List; {Описание списка}
List=record
Weight:Word; {Вес}
Next:PList;{Ссылка на следующий элемент nil-элемента не будет}
end;
var
Head,E1:PList; {Голова списка, с которым будем работать}
T:Word;
Procedure AppendList(var Head:PList;T:Word); {Добавление элемента в список}
var
C:PList;
begin
if Head<>nil then {Если список непустой - ищем последний элемент}
begin
C:=Head;
while C^.Next<>nil do C:=C^.Next; {Навигация по списку}
New(C^.Next); {Создание нового элемента}
with C^.Next^ do {и работа с ним через with для сокращения записи}
begin
Weight:=T;
Next:=nil;
end;
end
else
begin {Пустой список? - инициализируем}
New(Head);
Head^.Next:=nil;
Head^.Weight:=T;
end;
end;
Procedure OutList(L:PList); {Вывод списка L не передаем параметр с var,}
{т. к. менять ничего не требуется, в любом случае будет выделено
4 байта а переменная на навигацию по списку (текущий элемент) не потребуется}
begin
while L<>nil do
begin
write(L^.Weight,#32);
L:=L^.Next;
end;
writeln;
end;
Procedure InsertElem(var Dest,Match:PList;w:Word); {Вставка элементов}
var
C,T:PList;
begin
if Head<>nil then {Оперировать с пустым списком нет смысла выход из процедуры}
begin
C:=Head;
while C<>nil do {Навигация по списку}
begin
if C^.Weight=w then {Нашли искомый}
begin
New(T); {Генерируем новый элемент}
T^.Next:=C^.Next; {Исправляем ссылки и вставляем его с список}
C^.Next:=T;
T^.Weight:=Match^.Weight;
C:=T^.Next;
end
else
C:=C^.Next; {Иначе просто переходим к следующему}
end;
end;
end;
Procedure DestroyList(var Head:PList); {После работы список необходимо}
var {разрушить}
C:PList;
begin
while Head<>nil do
begin
C:=Head;
Head:=Head^.Next;
Dispose(C);
end;
end;
begin {Использование процедур}
Head:=nil;
repeat
write(‘Введите значение текущего элемента (65535 для завершения):‘);
readln(T);
if T<>65535 then AppendList(Head,T);
until T=65535;
write(‘Введите значение e1:‘); {Ввод значения для вставки}
New(E1); {можно просто переменную Word, но, следуя условию задачи формируем}
E1^.Next:=nil; {элемент E1 как элемент списка}
readln(E1^.Weight);
writeln(‘Исходный список:‘);
OutList(Head);
write(‘Введите вес. W=‘);
readln(T);
InsertElem(Head,E1,T);
writeln(‘Результат:‘);
OutList(Head);
DestroyList(Head);
readln;
end.

Если что - спрашивайте.
С наилучшими пожеланиями Павел Форсман.
Форма ответа