Форум Gatchina OnLine  

Вернуться   Форум Gatchina OnLine > Hard&Soft > Программирование и разработка

Программирование и разработка Обсуждение вопросов программирования

Ответ
 
Опции темы Опции просмотра
Старый 01.04.2007, 14:30   #1
Mr_Anderson
[Alternative] Rock Member
 
Аватар для Mr_Anderson
 
Регистрация: 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
И если завтра проснёшься - попробуй влюбиться! Как звезда рок-н-ролла...
Mr_Anderson вне форума   Ответить с цитированием
Старый 01.04.2007, 14:31   #2
Spirakoo
Дважды дипломирован
 
Аватар для Spirakoo
 
Регистрация: 16.11.2006

Нарушения:[Посмотреть]
эх...знакомая тема,но я ничего не помню,сор
Spirakoo вне форума   Ответить с цитированием
Старый 01.04.2007, 15:20   #3
Insya
online();
 
Аватар для Insya
 
Регистрация: 24.01.2006
Адрес: Гатчина

Нарушения:[Посмотреть]
а че-то вообще не поняла в чем проблема, особенно во второй задаче.. в чем конкретно у тебя загвоздка?
Insya вне форума   Ответить с цитированием
Старый 01.04.2007, 15:37   #4
Mr_Anderson
[Alternative] Rock Member
 
Аватар для Mr_Anderson
 
Регистрация: 23.01.2006
Адрес: Linkin Park
Jabber: mishka_anderson@jabber.ru
p2p: воистину p2p

Нарушения:[Посмотреть]
Цитата:
Сообщение от Insya Посмотреть сообщение
а че-то вообще не поняла в чем проблема, особенно во второй задаче.. в чем конкретно у тебя загвоздка?
В первой ясно как задать программе определять нули, но как сделать так, чтобы она считала именно последовательности и выводила количество нулей в ней. У меня получалось так, что программа считала все нули в общей последовательности чисел. Вроде ясно изъяснился.
Во второй понятно, что с использованием цикла WHILE, но хоть ты тресни, не получалось.
__________________
Fire Walk With Me
И если завтра проснёшься - попробуй влюбиться! Как звезда рок-н-ролла...
Mr_Anderson вне форума   Ответить с цитированием
Старый 01.04.2007, 18:32   #5
Apo
Местный
 
Аватар для Apo
 
Регистрация: 24.01.2006

Нарушения:[Посмотреть]
Насчёт первой задачи. Как реализовать это на ТП, я не знаю, так как его не изучал, но идея такая: Создаёшь переменную, которая будет выполнять роль счётчика, допустим A. Приравниваешь её к 0. Создаёшь другую переменную, в которой будет сохраняться максимальный результат, допустим B. Её тоже приравниваешь к 0. Создаёшь цикл, который прокручивает все числа на предмет 0 - не 0. Допустим число равно 0. Тогда прибавляешь к переменной А единицу. Если число - не 0, то присваиваешь переменной B значение переменной A, тем самым сохраняя результат, при условии, что предыдущее B < A, и опять приравниваешь А к нулю. В итоге после прокрутки всех чисел в переменной B должно сохраниться максимальное число нулей, идущих подряд. Оно там не сохранится в одном случае - если максимальное число нулей шло в конце, и после него уже не было ненулевого числа. Так что после выполнения цикла ещё раз сравниваешь A и B и переписываешь B, если А больше. Выводишь B.

Последний раз редактировалось Apo. 01.04.2007 в 18:38.
Apo вне форума   Ответить с цитированием
Старый 01.04.2007, 19:11   #6
M@GIC
Местный
 
Аватар для M@GIC
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
Синтаксис Паскаля не помню. Предлагаю решение на С++ Самое лёгкое и очень неэффективное. Пишу с коментами. Думаю не составит труда все перевести нс интаксис Паскаля.
PHP код:

int main
()
{
    
int mas1[25],mas2[25],i,max=0,maximum=0;// 
    
cout<<"Enter..."<<endl;
    for(
i=0;i<10;i++)
        
cin>>mas1[i]; вводим элементы массива

    
for(i=0;i<10;i++)
    {
        if (
mas1[i]==0если нуль
        
{
            
max++; то инкремируем на еденицу
                   mas2
[i]=0суём в другой массив 0.
        
}
        else
        {
            
mas2[i]=maxесли не нуль то скидываем во второй массив макс
            max
=0обнуляем
        
}
    }
          
//выполним поиск по 2 рому массиву наибольшег числа
    
maximum=mas2[0]; 
    for(
i=0;i<10;i++)
    {
        if (
mas2[i]>maximum)
        {
                   
maximum=mas2[i];

        }
    }
    
cout<<maximum<<endl//выведем максимальный элемент
    
getch();
    return 
0;

M@GIC вне форума   Ответить с цитированием
Старый 02.04.2007, 01:23   #7
Apo
Местный
 
Аватар для Apo
 
Регистрация: 24.01.2006

Нарушения:[Посмотреть]
Решение неплохое, но зачем вводить второй массив и выполнять поиск по нему максимального элемента, если можно обойтись одной переменной и условием в цикле, которое будет её менять? И что эта программа будет делать в вышеописанном случае, когда самое большое число нулей будет в конце массива? Слегка модифицированный код:

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.
Apo вне форума   Ответить с цитированием
Старый 02.04.2007, 17:39   #8
kainen
lsd made me a prostitute
 
Аватар для kainen
 
Регистрация: 24.01.2006

Нарушения:[Посмотреть]
Решение неплохое, но зачем вводить второй цикл и выполнять поиск в нем максимального элемента, если можно обойтись одним циклом и условием в цикле, которое будет находить максимум? Слегка модифицированный код:

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;
}

По-моему гораздо короче получилось...
kainen вне форума   Ответить с цитированием
Старый 02.04.2007, 17:47   #9
kainen
lsd made me a prostitute
 
Аватар для kainen
 
Регистрация: 24.01.2006

Нарушения:[Посмотреть]
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;
}

По-моему гораздо оптимальнее получилось...
kainen вне форума   Ответить с цитированием
Старый 02.04.2007, 17:59   #10
STem
профессиональный любитель
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
Цитата:
Сообщение от Mr_Anderson Посмотреть сообщение
Горит зачёт по гадскому турбо паскалю, а через неделю отчисление. 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
...
Заранее спасибо откликнувшимся.
ответы не читал, долго, просто свои варианты предложу, ты уж сам выбирай.

1.
ох уж эти высосанные формулировки. что считать-то? количество нулей в самой длинной последовательности? ну посчитай количество нулей во всех последовательностях нулей, запиши результаты в массив, а потом выбери из него максимум.
2.
кхм.. в примере написан какой-то бред, вам не кажется? если надо действительно от 1 до 100 км, сделай массив из 100 элементов и запиши в него числа (1000*(n+1))/1609.3 где n - номер ячейки (только округли результаты там как надо).
STem вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загадки и задачки shibzdik Юмор 390 03.10.2015 07:54
Задачки на С++ M@GIC Программирование и разработка 23 04.08.2009 15:35


Текущее время: 21:48. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot