Форум Gatchina OnLine

Форум Gatchina OnLine (https://forumgol.ru/index.php)
-   Программирование и разработка (https://forumgol.ru/forumdisplay.php?f=4)
-   -   Задачки по TP (https://forumgol.ru/showthread.php?t=4952)

Mr_Anderson 01.04.2007 14:30

Задачки по 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
...
Заранее спасибо откликнувшимся.

Spirakoo 01.04.2007 14:31

эх...знакомая тема,но я ничего не помню,сор

Insya 01.04.2007 15:20

а че-то вообще не поняла в чем проблема, особенно во второй задаче.. в чем конкретно у тебя загвоздка?

Mr_Anderson 01.04.2007 15:37

Цитата:

Сообщение от Insya (Сообщение 194962)
а че-то вообще не поняла в чем проблема, особенно во второй задаче.. в чем конкретно у тебя загвоздка?

В первой ясно как задать программе определять нули, но как сделать так, чтобы она считала именно последовательности и выводила количество нулей в ней. У меня получалось так, что программа считала все нули в общей последовательности чисел. Вроде ясно изъяснился.
Во второй понятно, что с использованием цикла WHILE, но хоть ты тресни, не получалось.

Apo 01.04.2007 18:32

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

M@GIC 01.04.2007 19:11

Синтаксис Паскаля не помню. Предлагаю решение на С++ Самое лёгкое и очень неэффективное. Пишу с коментами. Думаю не составит труда все перевести нс интаксис Паскаля.
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;



Apo 02.04.2007 01:23

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

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

По-моему гораздо короче получилось...

kainen 02.04.2007 17:39

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

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

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

По-моему гораздо оптимальнее получилось...

STem 02.04.2007 17:59

Цитата:

Сообщение от Mr_Anderson (Сообщение 194929)
Горит зачёт по гадскому турбо паскалю, а через неделю отчисление. 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 - номер ячейки (только округли результаты там как надо).


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

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