Под извеждане на масив ще разбираме последователното извеждане на всеки един елемент на масива на екрана. Според условието на задачата елементите на масива могат да се извеждат по един на ред или по няколко на ред и т.н.
При тази илюстрация ще приемем, че елементите се извеждат по един на ред. Както и при въвеждането ще опишем функция, която реализира това извеждане. Обхождането на елементите на масива отново ще извършим с цикъл for:
void write_a()
}
-
Остава да опишем функцията, която намира най-дългия период на застудяване. В случая става дума за стандартен алгоритъм за намиране на най-дълга последователност от елементи на масив, притежаващи едни и същи свойства. За реализацията на този алгоритъм са необходими две променливи, едната от които съдържа индекса на първия елемент на най-дългата последователност, а втората – дължината на тази последователност. Необходими са и две променливи със същото предназначение за текущата последователност.
В началото ще инициализираме всички тези променливи с 0, с изключение на началото на текущата последователност, което ще има стойност 1:
int m1=0, md=0, t1=1, td=0 ;
След това ще обходим елементите на масива един по един и за всеки ще проверяваме дали е под средната температура за месеца. Ако е така, това означава, че трябва да добавим още един елемент към текущата последователност, т. е. td++. В противен случай означава, че сме намерили елемент с по-висока температура, т. е. края на текущата последователност – в този момент е необходимо да сравним намерената дължина на текущата последователност с тази на максималната и ако е по-голяма да я присвоим на променливата, в която се пази минималната температура. Едновременно с това не трябва да забравяме да присвоим и на началото на най-дългата последователност началото на текущата, като при това присвоим на променливата td (дължината на текущата последователност) стойност 0, а на променливата t1 (началото на текущата последователност) индекса на следващия елемент на масива. Когато обхождането завърши е необходимо още веднъж да сравним дължината на текущата последователност с най-дългата, за да не пропуснем случая, когато най-дългата последователност е в края на масива. Ето как изглежда функцията, решаваща тази част от задачата:
void longseq()
{
int av=average();
int m1=0, md=0, t1=1, td=0 ;
for(int i=1;i<=30;i++)
if(a[i]
else
{
if(td>md){md=td; m1=t1;}
td=0;t1=i+1;
}
if(td>md){md=td; m1=t1;}
cout<<”най-дългият период на затопляне е от “<
}
В главната програма последователно ще извикаме всички функции, които написахме. Предоставяме на читателя тази вече сравнително тривиална задача.
-
Задачи за упражнение:
Зад. 1. Определете броя на елементите в масива A, B, C като знете, че последните елементи в съответните масиви са:
а) A[5];
б) B[(i+j)*3], ако i=3, j=5;
в) C[i/3+j%3], ако i=7, j=5;
Зад. 2. Даден е масив от 6 елемента int A[5], като
А[0]
|
A[1]
|
A[2]
|
A[3]
|
A[4]
|
A[5]
|
3
|
-2
|
8
|
7
|
5
|
-3
|
Какви стойности имат елементите на масива след изпълнението на следните операции за присвояване:
а) A[5]=5;
б) A[5]=A[0];
в) A[3]=(A[2]+A[4])/2;
г) X =A[3]; A[3]=A[4]; A[4]=X;
Зад. 3. Да се състави програма за работа с масив от цели числа, която да въвежда от клавиатурата броя на числата и самите числа и:
а) сгъстява масива, като премахва нулевите му елементи;
б) отпечатва броя на платформите в масива. (платформа е последователност от равни елементи – в условието на задачата платформата може да бъде зададена като последователност от елементи, които изпълняват определено свойство);
в) отпечатва началния и крайния индекс на най-дългата платформа в масива;
г) разменя местата на първия елемент, равен на минималния и последния елемент, равен на максималния.
Зад. 4.Редици
Имате редица от цели числа с дължина N (3
а) растяща редица - всеки пореден член е не по-малък от предишния член (A).
б) строго растяща редица - всеки пореден член е по-голям от предишния член (B).
в) намаляваща редица - всеки пореден член е не по-голям от предишния член (C).
г) строго намаляваща редица - всеки пореден член е по-малък от предишния член (D).
д) осцилираща редица - ако предищния член е бил по-малък от сегашния, то следващия е по-малък или равен на сегашния и обратно - ако предишния член е бил по-голям от сегашния то следващия трябва да е по-голям или равен на сегашния (E).
е) строго осцилираща - същото като осцилираща, само че не може да има два последователни еднакви елемента (F).
ж) аритметична прогресия - всеки член се получава от предишния с прибавяне на число, което е константа за цялата редица и може да е положително, отрицателно или нула (G).
з) геометрична прогресия - всеки член се получава от предишния с умножение на число, което е константа за цялата редица и може да е положително или отрицателно (H).
Примерен вход
5 1 2 3 4 5
4 1 –1 1 –1
5 1 2 3 3 8
8 1000 900 800 700 –1 –2 –3 –4
6 -1 7 7 –8000 –90 –100
Примерен изход
ABG
EFH
A
CD
E
Зад. 5. Великата Стена
Великата Стена разделяла Острова на Програмистите на две части - едната била на програмистите пишещи на Паскал, другата - на пишещите на С. Това било направено с цел срещите им да се сведат до нула понеже иначе се стигало до спорове завършващи в Пирогов. Стената била тухлена,като тухлите били наредени в колони,плътно залепени една до друга и с еднаква височина. Но една нощ вандали (програмисти на ассемблер) разместили тухлите като вземали от една колона и ги слагали върху някоя друга. Така стената станала неравна и можело да се мине през нея. Това било недопустимо, затова бил извикан известния майстор - QuickBasic, който трябвало да възстанови стената. Но QuickBasic имал странен нрав-искал преди да започне работа всичко да е предефинирано и известно, затова сега му е необходимо да научи с колко премествания на тухли може да се свърши работата и ако може с по-малко защото и не е много паметлив. На Вас се пада задачата да откриете (независимо от коя страна на стената сте) какъв е минималния брои тухли, които трябва да се преместят за да се изравни стената. Под едно преместване се разбира: вземаме една тухла от някоя колона с поне една тухла (броя на тухлите в тази колона намалява с една) и я слагаме върху някоя друга (броя на тухлите във втората се увеличава с една).
От клавиатурата се въвеждат следните данни:
На първия ред се намира цялото число N (1<= N<=3000) показващо броя на колоните в стената.
На следващите N реда е самата стена,като на всеки ред се намира цяло число Xi (0<=Xi<=60000) показващо броя на тухлите в i-тата колона.Общия брой на тухлите в стената не надвишава 60000.
Програмата отпечатва намереното число (минималния брой премествания) на екрана.
Примерен вход
4
4 9 8 7
Примерен изход
3
Зад. 5 DATE
Щастлива година е тази, която има в записа си две равни цифри. Да се състави програма DATE.EXE, която чете от клавиатурата цяло число n и след него n години, и извежда на екрана броя на тези от тях, които имат по две еднакви цифри.
Примерен вход
4
1234
1987
1271
2001
Примерен изход
2
Зад. 6 Дадени са резултатите от N(N<=100) поредни хвърляния на зарче. Да се състави програма ZAR4E.CPP, която прочита от клавиатурата броя N на хвърлянията и падналите се числа и отпечатва:
числото, което се е падало най-често;
началния и крайния номер на най-дългата последователност от еднакви попадения.
Сподели с приятели: