Zheka
Новичок
|
В первой задаче проблема остается лишь с выводимым результатом. Последовательность я ввожу собственноручно самую простую, чтобы можно было подсчитать в уме, но программа выдает другие результаты. Например я беру такую последовательность: 1,4,-3...(дальше неважно). Среднее геометрическое n чисел равно корню n-ной степени из произведения этих чисел. Вычисляем: 1*4=4; корень квадратный из 4=2; Программа же выдает: Sg=4.23... Что касается второй задачи, так вот чего он ко мне пристал, я не ввел массивы. Я просто представил себе, что массив x- это ось ox с координатами от 1 до 100, и точно так же y. Т.е. я нахожу все точки для данного радиуса, а нужно найти только те, которые есть в массиве, я правильно понял?
|
Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 1 нояб. 2007 3:21 | IP
|
|
KMA
Долгожитель
|
Я же тебе сказал, уточни формулу, проверь лишний раз, то что ты там написал это немного не верно:
Code Sample:
function step (x, y: real): real; begin step:=exp (y*ln(x)); end;
Вот функция нахождения степени числа х в y. Соответственно ее реализовать к тебе нужно следующим образом:
Code Sample:
Sg:=exp (1/(n-1) * ln(P) )
Должно работать.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 1 нояб. 2007 17:52 | IP
|
|
KMA
Долгожитель
|
Что касается второй задачи, так вот чего он ко мне пристал, я не ввел массивы. Я просто представил себе, что массив x- это ось ox с координатами от 1 до 100, и точно так же y. Т.е. я нахожу все точки для данного радиуса, а нужно найти только те, которые есть в массиве, я правильно понял?
Я не знаю как ты представлял себе массивы Х и У, у тебя в программе они вообще не заданы. Я понял твою задачу так: Даны сто точек, координаты которых записаны в массив так: т. 1 (x[1], y[1]), т. 2 (x[2], y[2]) и т. д. Требуется найти те точки, которые принадлежат окружности. Точки ты нашел верно, а как ты себе их представил я, к сожалению, никак не могу знать. :-(
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 1 нояб. 2007 17:55 | IP
|
|
Zheka
Новичок
|
to KMA: Что касается первой задачи: спасибо, всё верно, опять я не заметил очевидной ошибки... но мой препод её тоже не заметил А вот со второй задачей он снова ко мне пристал, заставил меня переделать ввод массивов рандомом, на ввод массивов вручную, только зачем? Я ему говорю там массив из 100 чисел зачем вручную, а он говорит уменьш массив. Логики никакой, в условии такого задания нет, так зачем изменять для решения конкретной задачи данное условие? Вобщем препод у нас немного туповат. Спасибо большое за помощь, без тебя бы я наверное ещё б месяц эту работу здавал
|
Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 2 нояб. 2007 2:48 | IP
|
|
KMA
Долгожитель
|
Ну я рад, что ты совсем справился. Еще вопросы будут, задавай не стесняйся. =)
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 2 нояб. 2007 22:11 | IP
|
|
AlDromS
Новичок
|
Привет всем! Нужна идея решения задачи: найти количество различных элементов в матрице. Так вот, как, собственно, считать их? Элементы могут быть любыми. Неужели каждый очередной проверяемый элемент нужно проверять со всеми предыдущими?! Помогите пожалуйста! Заранее благодарен!
|
Всего сообщений: 7 | Присоединился: ноябрь 2007 | Отправлено: 5 нояб. 2007 11:05 | IP
|
|
KMA
Долгожитель
|
Этот способ в принципе имеет место быть... Можно пойти по другому, скопировать все элементы в одномерный массив, остортировать, а далее смотреть, есть ли у этого элемента ближайший сосед и равен ли он ему. Он немного пошустрее получиться, если ты будешь использовать сортировку скажем шейкер или quick (быстрая). Можно еще один метод, но не знаю работать быстрее вряд ли будет, но можешь попробовать: Сравниваешь первый элемент с остальными, затем если видишь одинаковый затираешь его (тупо ставишь ноль, или число не равное ему). Затем, если натыкаешься на этот элемент, то его уже не прослеживаешь. Такой метод актуален, если одинаковых элементов довольно много, в худшем случае работает как тупой перебор. Так что смотри как тебе удобнее.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 5 нояб. 2007 17:42 | IP
|
|
AlDromS
Новичок
|
KMA: Спасибо, что откликнулся! :-) Я сделал так: Изначалное значение различных эл-тов kol=0; Берем первый элемент (первая строка-первый столбец) и проверяем нет ли равных ему среди остальных, как только нашли равный - останавливаемся и смотрим следующий (т.е. первая строка - второй столбец) и т.д., как только нашли эл-т, который не повторяется, присваиваем переменной kol значение +1, и продолжаем смотреть перебирать эл-ты до конца. По-моему, это самый оптимальный способ. Завтра посмотрим, что препод скажет ...
|
Всего сообщений: 7 | Присоединился: ноябрь 2007 | Отправлено: 5 нояб. 2007 18:02 | IP
|
|
KMA
Долгожитель
|
Это только по твоему самый оптимальный способ. А как на счет того, что тебе необходимо перебирать ВСЕ элементы по второму разу? Если я так понял твой алгоритм то для матрицы 1 0 1 5 6 1 1 0 1 Он должен вернуть 4. Хотя реально их 2. Вообще ты бы код привел, я бы тебе показал как его оптимизировать.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 6 нояб. 2007 17:42 | IP
|
|
xKOSTx
Новичок
|
Помогите решить простенькую задачу: Создать нетекстовый файл, содержащий инфу о машинах (модель, год выпуска, цвет, номер). Переписать в текстовый файл инфу о машинах черного цвета в порядке убывания года выпуска. Никак не могу справиться с сортировкой =( Program ProjectX; uses crt; type cars=record model,year,color,number:string[20]; end; car=file of cars; const n=3; var a: array [1..10] of cars; r1:cars; g,i,v,m,j:integer; f:car; f2:text; k:char; clr:string[10]; filename,filename2:string[15]; procedure VVOD; begin clrscr; write('Введите имя файла'); readln(filename); assign(f,filename); rewrite(f); for i:=1 to n do with r1 do begin writeln('Введите марку машины'); readln(model); writeln('Введите год выпуска'); readln(year); writeln('Введите цвет'); readln(color); writeln('Введите номер'); readln(number); write(f,r1); end; close(f); repeat until keypressed; clrscr; end; procedure VYVOD; begin clrscr; writeln('Введите имя файла'); readln(filename); assign(f,filename); writeln('Марка машинги':25,'Год выпуска':15,'Цвет':15,'Номер':8); reset(f); repeat read(f,r1); with r1 do writeln(model:25,year:15,color:15,number:8); until EOF(f); close(f); repeat until keypressed; clrscr; end; procedure Sort; begin {Здесь было много светлых мыслей, но заставить процедуру работать не удалось =( } end; procedure File2Text; begin clrscr; write('Введите имя файла '); readln(filename); assign(f,filename); reset(f); write('Введите имя 2ого файла '); readln(filename2); assign(f2,filename2); clr:='черный'; rewrite(f2); repeat read(f,r1); with r1 do if color=clr then write(f2,model:25,year:15,color:15,number:8); until EoF(f); close(f2); end; procedure Text; begin clrscr; writeln('Введите имя файла'); readln(filename2); assign(f2,filename2); writeln('Марка машинги':25,'Год выпуска':15,'Цвет':15,'Номер':8); reset(f2); repeat read(f2,k); write(k); until EOF(f2); close(f2); repeat until keypressed; clrscr; end; begin clrscr; while 1=1 do begin writeln('1.Cоздать записи..'); writeln('2.Вывести запись..'); writeln('3.Сортировать..') writeln('4.Переписать в текстовый файл..'); writeln('5.Вывести текстовый файл'); writeln('6.Выход'); readln(v); case v of 1:VVOD; 2:VYVOD; 3:sort; 4:File2Text; 5:Text; 6:Exit; else exit; end; end; end.
|
Всего сообщений: 2 | Присоединился: ноябрь 2007 | Отправлено: 7 нояб. 2007 20:48 | IP
|
|
|