|
Программирование и разработка Обсуждение вопросов программирования |
|
Опции темы | Опции просмотра |
01.04.2007, 14:30 | #1 |
[Alternative] Rock Member
Регистрация: 23.01.2006
Адрес: Linkin Park
Jabber: mishka_anderson@jabber.ru
p2p: воистину p2p
Нарушения:[Посмотреть] |
Задачки по TP
Горит зачёт по гадскому турбо паскалю, а через неделю отчисление. 3 из 6 задач сделал, а до остальных вообще никак не додуматься. Если кто сможет помочь, с меня причитается.
Интересует решение пары задач с циклическими участками: 1) даны 25 чисел, среди них много нулей. Найти количество чисел в наиболее длинной последовательности подряд идущих нулей. 2) построить таблицу пересчёта миль в киллометры (1 миля ~ 1609.3 м) для расстояний от 1 до 100 км. Таблица должна иметь следующий вид: мили км 0.6214 1.0000 1.0000 1.6093 1.2428 2.0000 1.8641 3.0000 ... Заранее спасибо откликнувшимся.
__________________
Fire Walk With Me И если завтра проснёшься - попробуй влюбиться! Как звезда рок-н-ролла...
|
01.04.2007, 14:31 | #2 |
Дважды дипломирован
|
эх...знакомая тема,но я ничего не помню,сор
|
01.04.2007, 15:20 | #3 |
online();
|
а че-то вообще не поняла в чем проблема, особенно во второй задаче.. в чем конкретно у тебя загвоздка?
|
01.04.2007, 15:37 | #4 | |
[Alternative] Rock Member
Регистрация: 23.01.2006
Адрес: Linkin Park
Jabber: mishka_anderson@jabber.ru
p2p: воистину p2p
Нарушения:[Посмотреть] |
Цитата:
Во второй понятно, что с использованием цикла WHILE, но хоть ты тресни, не получалось.
__________________
Fire Walk With Me И если завтра проснёшься - попробуй влюбиться! Как звезда рок-н-ролла...
|
|
01.04.2007, 18:32 | #5 |
Местный
|
Насчёт первой задачи. Как реализовать это на ТП, я не знаю, так как его не изучал, но идея такая: Создаёшь переменную, которая будет выполнять роль счётчика, допустим A. Приравниваешь её к 0. Создаёшь другую переменную, в которой будет сохраняться максимальный результат, допустим B. Её тоже приравниваешь к 0. Создаёшь цикл, который прокручивает все числа на предмет 0 - не 0. Допустим число равно 0. Тогда прибавляешь к переменной А единицу. Если число - не 0, то присваиваешь переменной B значение переменной A, тем самым сохраняя результат, при условии, что предыдущее B < A, и опять приравниваешь А к нулю. В итоге после прокрутки всех чисел в переменной B должно сохраниться максимальное число нулей, идущих подряд. Оно там не сохранится в одном случае - если максимальное число нулей шло в конце, и после него уже не было ненулевого числа. Так что после выполнения цикла ещё раз сравниваешь A и B и переписываешь B, если А больше. Выводишь B.
Последний раз редактировалось Apo. 01.04.2007 в 18:38. |
01.04.2007, 19:11 | #6 |
Местный
|
Синтаксис Паскаля не помню. Предлагаю решение на С++ Самое лёгкое и очень неэффективное. Пишу с коментами. Думаю не составит труда все перевести нс интаксис Паскаля.
PHP код:
|
02.04.2007, 01:23 | #7 |
Местный
|
Решение неплохое, но зачем вводить второй массив и выполнять поиск по нему максимального элемента, если можно обойтись одной переменной и условием в цикле, которое будет её менять? И что эта программа будет делать в вышеописанном случае, когда самое большое число нулей будет в конце массива? Слегка модифицированный код:
int main() { int mas1[25],i,max=0,maximum=0;// cout<<"Enter..."<<endl; for(i=0;i<25;i++) cin>>mas1[i]; for(i=0;i<25;i++) { if (mas1[i]==0) max++; else { if (max>=maximum) maximum=max; max=0; } } if (max>=maximum) maximum=max; cout<<maximum<<endl; getch(); return 0; } По-моему гораздо короче получилось... Последний раз редактировалось Apo. 02.04.2007 в 01:31. |
02.04.2007, 17:39 | #8 |
lsd made me a prostitute
|
Решение неплохое, но зачем вводить второй цикл и выполнять поиск в нем максимального элемента, если можно обойтись одним циклом и условием в цикле, которое будет находить максимум? Слегка модифицированный код:
const int max_num = 25; int main() { int number, i,max=0,maximum=0; cout<<"Enter..."<<endl; for(i=0;i<max_num;++i) { cin>>number; if (number==0) ++max; else { if (max>maximum) maximum=max; max = 0; } } if (max>=maximum) maximum=max; cout<<maximum<<endl; getch(); return 0; } По-моему гораздо короче получилось... |
02.04.2007, 17:47 | #9 |
lsd made me a prostitute
|
2kainen:Решение неплохое, но зачем такой длинный цикл? Слегка модифицированный код:
const int max_num = 25; int main() { int number, i,max=0,maximum=0; cout<<"Enter..."<<endl; for(i=0;i<max_num;++i) { cin>>number; if (number==0) ++max; else { if (max>maximum) maximum=max; max = 0; if (max_num - i <= maximum) break; } } if (max>=maximum) maximum=max; cout<<maximum<<endl; getch(); return 0; } По-моему гораздо оптимальнее получилось... |
02.04.2007, 17:59 | #10 | |
профессиональный любитель
|
Цитата:
1. ох уж эти высосанные формулировки. что считать-то? количество нулей в самой длинной последовательности? ну посчитай количество нулей во всех последовательностях нулей, запиши результаты в массив, а потом выбери из него максимум. 2. кхм.. в примере написан какой-то бред, вам не кажется? если надо действительно от 1 до 100 км, сделай массив из 100 элементов и запиши в него числа (1000*(n+1))/1609.3 где n - номер ячейки (только округли результаты там как надо). |
|
Опции темы | |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Загадки и задачки | shibzdik | Юмор | 390 | 03.10.2015 07:54 |
Задачки на С++ | M@GIC | Программирование и разработка | 23 | 04.08.2009 15:35 |