2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 помогите решить задачки
Сообщение16.11.2010, 20:23 
1.Напечатайте заданный текст из 100 литер,удалив из него повторные вхождения каждой литеры.
2.прямая на плоскости может быть задана уравнением ax+by=c,где a,b Одновременно не равны нулю и a,b,c -целые.Пусть даны коэффициенты нескольких прямых a1,b1,c1,a2,b2,c2,....,an,bn,cn.Определить имеются ли среди этих прямых совпадающие или паралельные.

 
 
 
 Re: помогите решить задачки
Сообщение16.11.2010, 23:31 
1. Вводите 2 символьных массива длины $n=100$: $a[n], b[n].$ Заполняете их.
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (a[j]==a[i]) b[j]='пробел';

for (i = 0; i < n; i++)
if (b[i] != ' ') печать b[i]



2. Тут можно ввести двумерный массив $a[n][m],$ где $m=3, n - $ количество прямых. Этот массив заполняется согласно условию. А потом просто в цикле (аналогично первой задаче) проверить условия совпадения и параллельности прямых.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 17:53 
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
  1. uses crt;
  2. var s:string[100];
  3.     i:integer;
  4. begin
  5. clrscr;
  6. repeat
  7. writeln('s: ');readln(s);
  8. until length(s)>=100;
  9. i:=1;
  10. while i<100 do
  11.    begin
  12.      while pos(s[i],copy(s,i+1,100-i))>0 do{пока очередной симол есть дальше по строке}
  13.      delete(s,pos(s[i],copy(s,i+1,100-i))+i,1);{удаляем его}
  14.      inc(i);
  15.    end;
  16. writeln(s);
  17. readln;
  18. end.
  19.  



вот так я примерно представляю решение первой задачи..верно или нет?
просто мне нужно решить с использованием массива.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 18:16 
Аватара пользователя
 !  Тема перемещена в Карантин.

Чтобы оттуда выбраться, приведите свои попытки решения задач.

После того как исправите сообщение, сообщите об этом в теме Сообщение в карантине исправлено.


-- Ср ноя 17, 2010 18:42:37 --

 i  Вернул.
Обратите внимание на оформление кода с помощью тега syntax.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 18:48 
uses crt;
const max=19;
var m:array[1..max,1..3] of integer;
n,i,j,k,p:integer;
begin
clrscr;
repeat
write('Количество точек от 3 до ',max,' n=');
readln(n);
until n in [3..max];
writeln('Введите коэффициенты уравнений прямых a,b,c');
writeln('a,b одновременно не равны 0');
for i:=1 to n do
begin
writeln('Прямая ',i);
repeat
readln(m[i,1],m[i,2],m[i,3]);
until(m[i,1]<>0)or(m[i,2]<>0);
end;
clrscr;
writeln('Коэффициенты уравнений:');
for i:=1 to 3 do
begin
write(chr(i+64));
for j:=1 to n do
write(m[j,1]:4);
writeln;
end;
writeln;
k:=0;
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for p:=j+1 to n do
{если прямые не параллельны}
if (m[i,1]*m[j,2]-m[j,1]*m[i,2]<>0)and(m[i,1]*m[p,2]-m[p,1]*m[i,2]<>0)
{вычисляем точку пересечения}
and((m[i,2]*m[j,3]-m[j,2]*m[i,3])/(m[i,1]*m[j,2]-m[j,1]*m[i,2])=
(m[i,2]*m[p,3]-m[p,2]*m[i,3])/(m[i,1]*m[p,2]-m[p,1]*m[i,2]))
then
begin
k:=1;
writeln('Прямые ',i,' (',m[i,1],',',m[i,2],',',m[i,3],') ',
j,' (',m[j,1],',',m[j,2],',',m[j,3],') ',
p,' (',m[p,1],',',m[p,2],',',m[p,3],');');
end;
if k=0 then write('Таких прямых нет!');
readln
end.


и решение второй задачи
надеюсь тут особых ошибок нет
проверьте пожалуйста

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 19:05 
Bulka_s_molokom в сообщении #376559 писал(а):
вот так я примерно представляю решение первой задачи.
Почти правильно. Единственное - длина строки s уменьшается, поэтому проверка i < 100 неправильная.

-- Ср ноя 17, 2010 11:09:53 --

Во второй задаче, почему Вы сравниваете по 3 прямые?
Вам надо каждую пару прямых проверить на параллельность и совпадение.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 19:24 
Аватара пользователя
А я так понял, что по условию второй задачи надо детектировать - есть ли в массиве совпадающие или параллельные линии. То есть находить точки пересечения и указывать пары параллельных не нужно. То есть при нахождении первой же пары пропорциональных штук выбрасываем белый флаг и выходим из задачи. Тогда третий столбец вообще не нужен. И вообще всё проще.
Или нет?

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 19:28 
gris в сообщении #376621 писал(а):
А я так понял, что по условию второй задачи надо детектировать - есть ли в массиве совпадающие или параллельные линии. То есть находить точки пересечения и указывать пары параллельных не нужно. То есть при нахождении первой же пары пропорциональных штук выбрасываем белый флаг и выходим из задачи. Тогда третий столбец вообще не нужен. И вообще всё проще.
Или нет?
Я так понял, что надо отдельно детектировать совпадающие, и просто параллельные. Так что третий столбец нужен.
Но вышеприведённая программа ищет совсем другое - тройки несовпадающих прямых, пересекающихся в одной точке.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 19:30 
venco в сообщении #376613 писал(а):
Bulka_s_molokom в сообщении #376559 писал(а):
вот так я примерно представляю решение первой задачи.
Почти правильно. Единственное - длина строки s уменьшается, поэтому проверка i < 100 неправильная.


подскажите как переделать?




а по поводу второй.надо просто определить имеються или нет такие прямые.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 19:42 
Аватара пользователя
По первой задаче я бы сделал так: начиная со второго символа делал проверку на совпадение литеры с предыдущими несовпавшими, в случае наличия совпадения литеру игнорировал, переходил к следующей. В случае несовпадения переписывал букву в конец несовпадающих. Нужно два индекса - конец очереди несовпавших и начало очереди проверяемых. Второй индекс меняется от 2 до 100. первый от 1 докуда получится. Потом можно забить пробелами.

-- Ср ноя 17, 2010 19:46:01 --

Вторая задача похожа на первую. Можно даже отделить все пересекающиеся линии. Или выскочить сразу при первой же паре совпавших или параллельных.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 19:54 
В первой задаче условие можно понять двояко. То ли надо удалить второй символ из двух соседних одинаковых, то ли надо удалить повторяющиеся символы везде в строке. ТС решил(а) второй вариант.

-- Ср ноя 17, 2010 11:56:21 --

Bulka_s_molokom в сообщении #376625 писал(а):
а по поводу второй.надо просто определить имеються или нет такие прямые.
Bulka_s_molokom, сложные выражения в тройном цикле Вы сами писали? Понимаете, что они делают?

-- Ср ноя 17, 2010 12:03:15 --

Bulka_s_molokom в сообщении #376625 писал(а):
venco в сообщении #376613 писал(а):
Bulka_s_molokom в сообщении #376559 писал(а):
вот так я примерно представляю решение первой задачи.
Почти правильно. Единственное - длина строки s уменьшается, поэтому проверка i < 100 неправильная.


подскажите как переделать?
Старайтесь цитировать правильно.

Скажите сначала, что означает выражение i < 100 и для чего оно там стоит.

 
 
 
 Re: помогите решить задачки
Сообщение17.11.2010, 20:15 
Аватара пользователя
Оффтопическое: любому молодому программисту (и не только) приходилось с раскрытым ртом и с потерянными надеждами на гонорар выслушивать гневные слова заказчика, что на самом деле он имел в виду не общепринятые вот в этой вашей среде умолчания, а то, чему ему его учили и что нормальному человеку и так понятно, а вашу программку моя секретарша левой рукой, понимаешь, а вот теперь план годовой летит. А стирать не надо, может быть Светочка вечерком сумеет поправить. Ну это, конечно, утрированно, но бывает.
Так что нужно приучаться даже с учебных задач как бэ ТЗ согласовывать, где всё прописывать и оговаривать.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group