Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения icon

Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения




Скачати 335.13 Kb.
НазваМетодические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения
Дата конвертації21.02.2014
Розмір335.13 Kb.
ТипМетодические указания

Министерство образования Украины

ОДЕССКИЙ ГОСУДАРСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ


МЕТОДИЧЕСКИЕ УКАЗАНИЯ
И КОНТРОЛЬНЫЕ ЗАДАНИЯ
ПО ДИСЦИПЛИНЕ


«ОСНОВЫ ПРОГРАММИРОВАНИЯ И
АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ»

для студентов заочной формы обучения
специальностей 7.080403 и 7.091501


Язык С и С++. Часть 1


Утверждено
на заседании кафедры системного программного обеспечения
Протокол №8 от 22.01.2001г.


Одесса ОГПУ 2001

Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения специальностей 7.080403 и 7.091501 язык С и С++. Ч. 1./ Сост.: А.Б. Кунгурцев, Р.А. Тарасенко. Одесса: ОГПУ 2001.


Составители: А.Б. Кунгурцев к.т.н., доц.

Р.А. Тарасенко асс.
^

Тема 1. Лексеми. Вирази


Програма на мові С++ записується за допомогою набору символів, що створюють алфавіт мови. До алфавіту надходять рядкові та прописні літери латинського алфавіту, цифри дужки, знаки операцій та множина спеціальних символів.

З символів будуються лексеми – простіші конструкції мови, що мають певне значення для компілятора. До лексем відносять:

  • розподілювачі;

  • знаки операцій;

  • ідентифікатори (імена);

  • ключові слова;

  • константи.

Лексеми можуть бути одно символьні (деякі знаки операцій та розподілювачі) та багато символьні.

Ідентифікатори – це послідовність літер та цифр, що починається з літери. Знак підкреслення “_” прирівнюється до літери. Рядкові та прописні літери відрізняються. Ідентифікатори використовуються як імена змінних, констант, функцій та інших конструкцій мови.

Ідентифікатори, що мають певне значення для компілятора, звуться ключовими словами. У мові С++ ключові слова не можна використовувати будь яким іншим засобом.

Константи можуть бути числові (22, -8, 0.05, 2С-2, -3.1С-12), символьні (‘a’, ‘*’, ‘\b’, …) чи рядкові (рядок символів, “press any key”, …).

Вираз – це правило обчислення деякого значення. Вираз складається з операторів та операцій. Операціями можуть бути:

  • константи;

  • змінні;

  • виклики функцій (показники на функції).

Мова С++ має приблизно 50 операцій. Вони підрозділяються на одно- , двох та трьохмістні (в залежності від кількості операндів), а також на групи (в залежності від пріоритету (черги виконання)). Нижче приведена таблиця операцій, що використовують частіше за інших.

Пріоритет

Позначення

Зміст операції

Приклад та пояснення

1

( )

включення виразу у дужки

2*(a+b) зміна пріоритету




[ ]

індексні дужки

a[i+1]/b[i]

2

!

логічне заперечення

!(2>1) одержимо 




+ +

зростання на 1

2++ одержимо 3




- -

зменшення на 1

2 -- одержимо 1

3

*

множення

2*3 одержимо 6




/

ділення

7/2 одержимо 3




%

залишок від ділення

6%4 одержимо 2

5

+

додавання

2+3 одержимо 5




-

віднімання

5-2 одержимо 3

7

<

менше

2<3 одержимо не 




>

більше







<=

менше чи дорівнює

2>=3 одержимо 




>=

більше чи дорівнює




8

= =

рівність

2 = = 3 одержимо 




!=

нерівність

2!=3 одержимо не 

12

&&

логічне “і”

2<3&&4<5 одержимо не 

13

||

логічне “або”

2>5||5>3 одержимо не 

15

=

призначити

а=3 одержимо а=3




+=

призначити з додаванням

а+=3 теж саме, що і а=а+3




*=

призначити з множенням

а*=3 теж саме, що і а=а*3


Операції з однаковими пріоритетами виконуються послідовно ліворуч на праворуч. Виключення – операції призначення, що мають протилежну послідовність виконання.

Нижче приведена таблиця, що містить деякі арифметичні функції, що використовуються частіше за інші:



Функція

Звернення до функції у програмі

sin(x)

sin(x)

cos(x)

cos(x)

|x|

abs(x)

fabs(x)

ex

exp(x)

√x

sqvt(x)

Приклад запису виразу:



на мові С++:

(a + fabs(b–c))/(a+sin(sqrt(x)))


^

Вопроси по темі 1


1. Какие из последовательностей символов являются идентификаторами

A3, a*3, 100d, d100, alfa(x)?

2. В выражении a/b * c/d * e/f * h расставить скобки так, чтобы выражению со скобками соответствовала дробь



3. Вычислить значение выражения (sin(sqrt(x) – 1)+2*abs(y))/cos(2+y), при следующих значениях переменных: x=1, y=-2.

4. Записать выражение на языке C



5. Записать, какими знаками логических операций и операций отношения необходимо дополнить приведенное выражение:

X Y X
Это выражение должно соответствовать следующей зависимости

X≠Y и X
6. Указать ошибку в арифметическом выражении

2(X+1)

7. Указать, какими символами нужно дополнить приведенное арифметическое выражение:

(X*X – 18)/(A+X)sin X-A

Это выражение должно реализовывать математическую формулу


^

Тема 2: Структура програми. Описи та оператори. Програмування лінійних обчислювальних процесів.


Для опису конструкцій мови часто застосовують синтаксичні діаграми. Елементи діаграм та позначають синтаксичні константі. Елемент позначає синтаксичну змінну. Символ визначає чергу проходження елементів діаграми.

Так, наприклад, описана раніше лексема “ідентифікатор” буде зображена діаграмою: ідентифікатор



Програма на мові С++ може містити один чи декілька програмних файлів. Нижче навелена типова структура однофайлової програми:



Кожна функція має слідуючу структуру:



У свою чергу, заголовок функції має вид:



В однофайловій програмі обов’язково присутня функція з ім’ям main. З цієї функцій починається виконання програми.

Кожне ім’я, окрім ключових слів, що використовується у програмі, первинне мати опис. Опис може бути глобальним (за межами функції) і тоді його дія розповсюджується на всі функції, що розташовані нижче, чи локальним (у межах функції) і тоді його дія обмежена останньою дужкою “}” цієї функції.

Опис змінних, констант, показчиків застосовують для:

  • виділення місця у пам’яті під об’єкт, що має опис;

  • визначення формата об’єкту;

  • визначення операцій, що можна застосувати для даного об’єкта.

Вся ця інформація міститься у понятті типу даних. Нижче наведен опис трьох базових типів даних:



Познач.

Назва

Місце у пам’ті

Діапазон значень

Приклади запису констант

int

Цілий

2(4)

-32768  32767

-25 32000 +198

double

Дійсний подвійний

8

1.7∙10^(-308) 1.7∙10^(+308)

-0.8 5е-3 -1.5е11 2.0

сhar

Символьний

1

0255 (код символа)

‘a’ ‘*’ ‘\n’(код=10) ‘\a’(код=7)

Опис змінної визначен слідуючою діаграмою:




Приклади:

in i, j;

double a, b, c;

char d;


Змінну можна ініціалізувати одночасно з описом.

Приклад:

int a, j=3, k=100;


Опис константи:



Приклад:

const double pi=3.14159;


Описи можна розташувати у спеціальному заголовочному файлі з поширенням *.h. Наприклад, у файлі math.h можна знайти описи більшості математичних функцій (sin, cos,…). Для підключення такого файла до програми застосовують директиву препроцесора #include.

Оператор – це одиниця дії мови. Оператори розподіляють а прості та структуровані. До простих операторів відносять:

  • оператор – вираз;

  • оператор break;

  • оператор continue;

  • оператор return;

  • оператор goto;

  • пустий оператор.

Будь який вираз, що закінчується символом “;” є оператор.

Приклад:

++i; y=(a+b)/c; sort(x,n);


Оператор break використовується як внутрішній у операторі циклу і викликає завершення циклу.

Оператор continue використовується як внутрішній у операторі циклу і викликає передачу управління на заголовок циклу з метою продовженя його виконання.

Оператор return завершує виконання функції і передає управління у функцію, що її викликала.

Оператор goto передає управління оператору, що має відповідну мітку.

Пустий оператор не містить ніякого коду і не викликає ніякої дій.

Коментар – це будь який текст, заключенний у комбінацію символів “/*” та “*/” у межах одного чи декількох рядків, а також будь який текст, розташований праворуч від символа “//” у межах одного рядка.

Найпростіше введення даних можна реалізувати за допомогою слідуючої конструкції:

cout<< << << …;


Найпростіше виведення данних можна реалізувати за допомогою конструкції:


cin>> >> >> …;

Нижче наведен приклад програми, що обчислює значення y:

y = a + b x sin(x);


#include //Підключення файла для опису cin та cout
#include //Підключення файла для опису функції sin

void main() //Головна функція без параметрів, нічого не повертає
{
cout<<“\n Введите a,b,x”; //
На екрані з’явиться запрошення для введення.
//Символ ‘\n’ запеспечує перехід на навий рядок.
cin>>a>>b>>x; //Введення даних. Наприклад, можна ввести 5 2 1.6
y=a+b*sin(x); //Обчислення y
cout<<“\n y= ”<Виведення на екран значення y
} //Кінець програми

Для перевірки правильності програми завжди треба підготувати тест – набір початкових даних, для яких можна підрахувати результат. У нашому прикладі це буде:

y = 5 +2 x sin(1.6) = 7

Якщо результат виконання програми відрізняється від очікуваного, треба виконувати відлагодженя програми.


^

Вопроси по темі 2


1. Смешано V1 литров воды температуры t1 с V2 литрами воды температуры t2 . Написать программу вычисления объема и температуры образовавшейся смеси.

2. Какое значение будет выведено в результате выполнения последовательности операторов

cin >> x>>y; z=sqrt( sqrt(x)*sqrt(y)); cout<
3. если последовательность исходных данных была составлена из двух чисел 0.5 и 0.16?

4. Какие значения будут иметь переменные x и y после выполнения последовательности операторов

cin >> x>>y; t=x; x=y; y=t;

если последовательность исходных данных представлена в виде 5.2 и 17.7?

5. Какие значения будут выведены в результате выполнения последовательности операторов

cin >> x>>y; x=x+y; y=x-y: x=x-y; cout<
6. Какие операции определены над операндами булевого типа?
^

Тема 3: Програмування обчислювальних процесів з розголудженням.




Обчислювальні процеси, у яких відбувається вибір одного з декількох можливих варіантів обчислювань, називають процесами з розголудженнм. Для їх реалізації застосовують оператори if та switch. Схема оператора if наведена нижче:



При виконанні оператора if обчислюється значення вираза. Якщо це значення не дорівнює , обчислюється оператор1. У протележному випадку, при наявністі “else”, обчислюється оператор2, а при відсутності – не виконується ніяких дій.


Нариклад, вираз: a , якщо x ≠ 0,



може бути запрограмоване слідуючим чином:

if (x != 0) y = a / pow(x,2); else y = pow(x,2);

Якщо під час виконання деякої умови необхідно виконати декілька дій, можна об’єднати послідовність операторів у один складений оператор:



Наприклад, слідуючий вираз:

якщо x > 5, то y = 5 та z = 2x;

якщо x <= 5, то y = -1 та z = 0.5x

можна запрограмувати слідуючим чином:

if (x>5) {y=5;z=2*x;} else {y=-1;z=0.5*x}

Розглянемо приклад програми, містить розголудження.

На площі задана точка з радіусами r1 та r2. Необхідно визначити, лежить чи ні точка на кільці.



#include

#include

void main()

{ double tx, ty, Ox, Oy, r1, r2, S;

cout<<“\n Ввести координати точки”;

cin>>tx>>ty;

cout<<“\n Ввести радіуси”;

cin>>r1>>r2;

cout<<“\n Ввести координати центру”;

cin>>Ox>>Oy;

S=sqrt(pow(tx-Ox,2)+pow(ty-Oy,2)); //Відстань від точки до центру кола

if (S>=r1 && S<=r2) cout<<“\n Точка належить колу”;

else cout<< “\n Точка не належить колу”;

}
^

Вопросы по теме 3


1. Какие значения получат переменные А и В в результате выполнения фрагмента программы
if (A>B) A=B; else B=A; A=A+1;…
если перед его выполнением А=0.5, В=-1.7?

2. Какое значение примет переменная у в результате выполнения следующего фрагмента программы

……….

x=1;

if( x<2 ) y=x;

if( x<3 ) y=2; else y:= -x+5;

cout << y;

……….

3. Условный оператор

if (sqrt(x)>2) if( x>2 ) y=x*x*x; else y=8; else y=8*sqrt(x);

устанавливает зависимость значения у от значения х. Построить график этой зависимости в интервале 0 ≤ x ≤ 4 с шагом ∆x=1.

4. Изобразить синтаксическую диаграмму оператора CASE.

5. Определить, что будет выведено на терминал в результате выполнения следующей программы, если последовательность исходных данных представлена числом 0:

#include

void main()

{

int N;


cin>>N;

switch (N){

case 1:

case 2:{

cout<<"Выполняем контрольные работы";

break;

}

case 5:

case 6:

case 7:{

cout<<"Отдыхаем";

break;

}

case 10:cout<<"Решаем домашние проблемы";

}

}

6. Какое значение получит переменная Z после выполнения следующего фрагмента программы?

………….

Z=5; B=5; X=8;

if( (B–Z)<0 ) {Z=Z–B; break;} else if( (B – Z)==0) Z:=Z+X; Z=2*Z;

cout << Z;

………….

7. Какое значение получит переменная Z после выполнения фрагмента программы?

………….

A=3; X=7; Y=5;

if( XA ) Z=X+Y else Z=0; else Z=X*A;

cout << Z;

………….
^

Тема 4: Програмування циклічних обчислювальних процесів


Послідовність операторів, яка може виконуватись більше одного разу, зветься циклом. Для організації циклів у мові С++ є три оператори:

while – цикл з предумовою;

do while – цикл з посту мовою;

for – цикл з параметром.

Цикл з передумовою має слідуючу структуру:



Якщо значення виразу не дорівнює , виконується внутрішній оператор, після чого цикл повторюється. У протилежному випадку цикл закінчується.

Як приклад, створимо, програму для обчислення найбільшої суми членів гармонічного ряду: 1 1/2 1/3 …..1/n, - що не перевищує значення числа х.

#include

void main()

{double x, s=0;

int i=1;

cout<<“\n Ввести х”;

cin>>x;

do{ s+=1.0/i; i++;}

while (s<=x);

cout<<“\n S= ”<
}


Цикл з параметром for має слідуючу структуру:



Вираз1 задає начальне значення параметра, вираз2 – умови виконання цикла, а вираз3 – формулу для зміни значення параметра.

Як приклад, розглянемо програму, що підраховує суму n членів гармонічного ряду.

#include

void main()

{double s=0;

int i, n;

cout<<“\n Ввести число n”;

cin>>n;

for(i=1;i<=n;i++)

s+=1.0/i;

cout<<“/n S= ”<
}
^

Вопросы по теме 4


1. Может ли переменная х быть параметром (управляющей переменной) в операторе цикла с параметром если в цикле вычисляется функция y=f(x) при 0 ≤ x ≤ 1 с шагом ∆x=0.1?

2. Чем отличается оператор цикла с предусловием от оператора цикла с постусловием?

3. Какое значение примет переменная F после выполнения фрагмента программы: I=1; F=2; while( I<6 ) I=I+1; F=F*I;

4. Какое значение примет переменная F после выполнения фрагмента программы: I=1; F=2; while( I<6 ){I=I+1; F=F*I;}

5. Определить, что будет выдано на терминал в результате выполнения следующей программы

#include

void main()

{

float x,s,tmp;

int i;

cout<<"\nВведите число x";

cin>>x;

s=0;

i=1;

while (x>(s+(1/i)))

{

tmp=(float)1/i;

s=(s+tmp);

i++;

}

cout<<"\nИскомая сумма:"<
}

6. Определить, что будет выдано на терминал в результате выполнения следующей программы

#include

void main()

{

float s;

int i,n;

cout<<"\nВведите число n";

cin>>n;

s=0;

for (i=1;i
s=s+(float)1/i;

cout<<"\nИскомая сумма:"<
}


7. Определить, что будет выдано на терминал в результате выполнения следующей программы


#include

void main()

{

float x,s,tmp;

int i;

cout<<"\nВведите число x";

cin>>x;

s=0;

i=1;

do

{

tmp=(float)1/i;

s=s+tmp;

i++;

}while (s
cout<<"\nИскомая сумма"<
}


8. Определить, что будет выдано на терминал в результате выполнения следующей программы

#include

void main()

{

float x,Sum;

Sum=0;

x=10;

do

{

Sum=Sum+x;

x--;

}while(x>5.5);

cout<<"\nSum="<
cout<<"\nX="<
}


9. Определить, что будет выдано на терминал в результате выполнения следующей программы

#include

void main()

{

float Sum;

int x;

Sum=0;

for(x=10;x>5;x--)

Sum=Sum+x;

cout<<"\nSum="<
cout<<"\nX="<
}

^

Тема 5: Масиви


Масив - це структурований тип даних, що об’єднує деяку кількість однотипних елементів. Кожний елемент масива має свій номер, який називають індексом.

Умові С++ масиви можуть бути статичні, для яких місце у пам’яті виділено під час компіляції, та динамічні, для яких місце у пам’яті виділяють під час виконання програми.

Нижче приведена діаграма опису статичного масиву:



Константний вираз визначає кількість індексів для кожного виміру.

Нижче наведен опис одніморного масива а з елементами цілого типу та двумірного масива b з елементами дійсного типу:

int a[6];

double b[5][15];

Операції над масивом виконуються за допомогою операцій над його елементами. Елементами масива а будуть: a[0], a[1], a[2], a[3], a[4], a[5].

Масиви дуже часто виконуються у програмуванні. Над ними виконуються різноманітні операції. Але можна визначити набір простіших типових операцій, з котрих можна будувати більш складні. Це – пошук найбільшого та найменшого чисел, підрахування кількості елементів, що відповідають деяким умовам, сортування та пошук елементів.

Приклад:

Задан масив х, що містить 20 дійсних чисел. Необхідно знайти добуток ненульових елементів – р, кількість від’ємних – kotr, найбільше та найменьше числа.

#include

void main()

{double m[20], p=1, mmax, mmin;

int kotr=0, i;

cout<<“\n Ввести 20 чисел”;

for(i=0;i<20;i++)

cin>>m[i];

mmin = mmax = m[0];

for(i=0;i<20;i++)

{if(m[i] != 0) p *= m[i];

if(m[i] < 0) kotr ++;

if(m[i]>mmax) mmax = m[i];

if(m[i]

};

cout<<“\n P= ”<


}

Для створення динамічних масивів використовують показчики. Показчик – це змінна, значенням якої є адреса, за якою може зберігатися якесь значення. Нижче приведен опис показчиків на double, int та char:

double *p1;

int *p2;

char *s;

Опис показчика виділяє місце у пам’яті тільки для показчика, але не для значення, на яке він вказує. Для виділення пам’яті для значення ми будемо застосовувати операцію new (другий пріоритет):

p1 = new double;

p2 = new int;

Якщо місце у пам’яті виділено, можна звернутся до відповідного значення, застосовуючи показчик. Наприклад:

*р1 = 32.44;

*р2 = 100;

Для створення масива з 10 елементів типа double треба під час виділення місця операцією new вказати кількість елементів:

p1 = new double [10];

Нижче наведена реалізація простішого алгоритму сортування масива (метод обміну). Відповідно до цього метода зрівнюються кожні два сусідні елементи. Якщо значення елементів не відповідає умовам сортування, їх обмінюють місцями. Таким чином, за один прохід по масиву як найменше один елемент займе своє останнє місце. Цикл буде повторюватися, поки не буде жодного обміну.

Нижче наведена програма сортування за зростанням значень елементів одномірного масиву дійсних чисел. Кількість чисел визначається у процесі виконання програми.


#include


void main()

{double *m, c;

int i, f, n;

cout<<“\n Ввести кількість елементів масива”;

cin>>n;

m=new double[n]; //Виділення місця під масив

cout<<“\n Вводить ” <

for(i=0;i

cin<

do { f=0; //Прапорок, f=0, позначає, що переставлень нема

for(i=0;i

if(m[i]>m[i+1]) //Необхіден обмін

{c=m[i];

m[i]=m[i+1];

m[i+1]=c;

f=1; //Був обмін

}

while f; //Якщо f=1, то цикл повторюється

cout<<“\n Відсортирований масив:”;

for(i=0;i

cout<

}


^

Вопросы к теме 5


1. В какой последовательности размещаются в памяти элементы двумерного массива Х[7][5]?

2. В какой последовательности размещаются в памяти элементы трехмерного массива Y[10][8][5]?

3. Присвоить нулевые значения всем элементам массива float A[44];

4. Можно ли с помощью оператора цикла с параметром обрабатывать элементы одномерного массива Y, начиная с последнего элемента и кончая первым?

5. Могут ли элементами некоторого массива быть числа 1 1.41 1.73 2. Если могут, то привести описание этого массива.

6. Описать двумерный массив вещественных чисел, содержащий 2 строки и 3 столбца.

7. Определить, что будет выдано на терминал в результате выполнения следующей программы.


#include

const n=20;

void main()

{

float* m = new float n;

float P, mmax, mmin;

int i,kotr;

cout<<"\nВведите "<

for (i=1;i
cin>>m[i];

P=1;

kotr=0;

mmax=m[1];

mmin=m[1];

for (i=1;i
{

if (m[i]!=0) P=P*m[i];

if (mmax
if (mmin>m[i]) mmin=m[i];

if (m[i]<0) kotr++;

}

cout<<"\nПроизведение P="<

cout<<"\nmmax="<

}


8. Определить, что будет выдано на терминал в результате выполнения следующей программы.


#include

const n=50;

void main()

{

int* m = new int n;

int k,i,c,f;

cout<<"\nВведите количество элементов массива(<=50)";

cin>>k;

cout<<"\nВведите "<
for(i=1;i
cin>>m[i];

do

{

f=1;

for(i=1;i
if (m[i]>m[i+1])

{

c=m[i];

m[i]=m[i+1];

m[i+1]=c;

f=0;

}

}while(f==1);

cout<<"Отсортирован массив";

for(i=1;i
cout<
}
^

Тема 6: Функції


Усі функції окрім головної (main) викликаються іншими функціями. При тому, як правило, їм треба передати дані для виконання їх власної програми. Ці доні можно передавати за допомогою глобольних змінних, сумісних для декількох функцій, чи через параметри, формальні у заголовку функції, та відповідні їм фактичні у виклику функції. Перший засіб має дуже обмежене розповсюдження. Основним є другий.

Якщо функція обчислює одне значення, це значення звичайно повертається у точку виклика з ім’ ям функції. Тип цього значення повинен бути зафіксован у заголовку функції, як тип повертаємого функцією значення. Одночасно у тілі функції треба записати оператор повернення:



Якщо функція обчислює декілька значень, що треба отримати, то необхідно їх записати як формальні параметри функції. У цьому разі тип повертаємого функцією значення буде void (нічого).

Параметр, через який дані можуть бути передані у функцію чи з функції, повинен бути показчиком чи посиланням.

Як приклад, розглянемо програму для обчислення у по формулі y = a + b. У програмі треба застосувати функції для:

  • введення двох дійсних чисел;

  • обчислення суми двох чисел;

  • виведення результата на екран.

Певна річ, цей приклад не слід розглядати як зразок виконання операції додавання, але як досить вдалий приклад різноманітного використання функцій.

#include

//Функція введення двох чисел, повертає значення через показчики х1 та х2

void in_ab(double *x1, double x2)

{cout<<“\n Ввести два числа”;

cin>>*x1>>*x2; //*х1 та *х2 у cin визначає “значення за адресою”

} //і дозволяє прийняти число, а не його адресу.

//Функція визначення суми

//Повертає значення типу double завдяки оператору return х1 + х2;

double sum(double x1, double x2) {return x1+x2;}

// Функція виведення результату.

void out_rez(double x) {cout<<“\n результат: ”<


void main()

{double a, b, y;

in_ab(&a,&b);

//Запис &а, &b означає “адреса а”, “адреса b”. Для виклика функції

//in_ab формальним параметрам double *x1 та double *x2 мають //відповідати фактичні параметри того ж типу (показчики чи адреси)

y=sum(a,b); //Функція sum повертає значення, яке надається змінній у

out_rez(y);} //Виведення результату


Функція не може повернути за допомогою свого імені значення масива, тому що масив містить більше ніж одно значення. Якщо потрібно передати у функцію, чи повернути з функції масив, можна застосувати спеціальну конструкцію:



як параметр. При цьому треба розуміти, що ім’я масива – це фактично показчик на початок області пам’яті, що виділена для масиву. Наприклад, заголовок функції, що виконує сортування масиву дійсних чисел, може мати слідуючий вигляд:

void sortm(double mas[], int k) { … }

де mas – відібражає масив, а k – кількість його елементів. Відповідно, видклик функції sortm може мати вигляд:

void main()

{double d[20];

………………

sortm(d, 20); //Сортування масива d.

………………

}


Слід розуміти, що значення масиву d нікуди не пересилається. Функція sortm отримує адресу масива d (фактично адреса d[0]) та кількість елементів (20), що дає змогу сортувати масив на тому місці, де він знаходиться.

Якщо формальний параметр, пов’язаний з фактичним параметром–показчиком, не повинен змінюватися, треба до його опису додати слово const:

void ff(const char *s, …)

^

Вопросы по теме 6


1. Определить, что будет выдано на терминал в результате выполнения программы:


#include

int sum(int,int);

void main()

{

int a;

a=sum(12,3);

cout<
}

int sum(int b,int c)

{

return (b+c);

}


2. Определить, что будет выдано на терминал в результате выполнения программы:


#include

int a,b;

void prst(int,int);

void main()

{

a=1;

b=2;

cout<
prst(a,b);

cout<
prst(a,b);

cout<
}

void prst(int x,int y)

{

int dop;

dop=x;

x=y;

y=dop;

}


3. Определить, что будет выдано на терминал в результате выполнения программы:


#include

int k;

void lng(int);

void main()

{

for(k=1;k<7;k++)

lng(k);

cout<<"\nКонец";

}

void lng(int i)

{

int n;

for(n=1;n
cout<<"x";

cout<<" ";

}


4. Определить, что будет выдано на терминал в результате выполнения программы:


#include

int i;

float a[2];

void R(int,float);

void main()

{

a[0]=1;

a[1]=2;

i=0;

R(i,a[i]);

cout<
}

void R(int k,float x)

{

k=2;

x=0;

}
^

Задачи к контрольной работе

Задача №1




вар.

Условие

1.

Задан одномерный массив Х вещественных чисел. Найти сумму элементов наиболее длинной последовательности чисел, не содержащей 0.

2.

Заменить все нулевые элементы массива Х Целых чисел на первый отрицательный элемент.

3.

Задан одномерный массив Х вещественных чисел. Подсчитать число элементов, входящих в непрерывные последовательности отрицательных чисел, содержащие k и более элементов.

4.

Для массива Х найти:, где Xn1=A; Xn2=B. (Имеются Xi=A, Xk=B)

5.

Задан одномерный массив Х целых чисел. Найти количество чисел в наиболее длинной последовательности отрицательных чисел.

6.

Задан одномерный массив Х вещественных чисел. Найти произведение чисел, составляющих наиболее длинную непрерывную последовательность элементов, не содержащую 0.

7.

Задан одномерный массив Х целых чисел. Найти сумму элементов, которые по модулю больше соседних элементов.

8.

Задан одномерный массив Х вещественных чисел. Подсчитать число 0, завершающих последовательности не менее чем из k отрицательных элементов.

9.

Для массива Х вещественных чисел определить n и

, где Xn+A>B

10.

Задан одномерный массив Х целых чисел. Найти наименьший элемент в наиболее длинной непрерывной последовательности отрицательных чисел.

11.

Задан одномерный массив Х вещественных чисел. Найти наибольший элемент в наиболее длинной непрерывной последовательности положительных элементов массива.

12.

Для массива Х целых чисел найти:

n1, n2, , где Xn1=0, Xn2>0

13.

Определить произведение ненулевых элементов Хi одномерного массива Х вещественных чисел, удовлетворяющих условию Xi-1>Xi при 2

14.

Из массива Х целых чисел перенести в массив Y элементы с Xn по Xm, где Xn>Xn-1 и Xm>A.

15.

Сформировать массив Y вещественных чисел с элементами, которые равны порядковым номерам элементов массива Х, если такие же числа содержатся в массиве Z.

16.

Сформировать массив Y целых чисел из элементов массивов X и Z по принципу: Y1=X1, Yi=Xj, если Yi-1j; Yk=Zm, если Yk-1>Zm.

17.

Определить количество нечетных элементов Yi массива Y целых чисел, удовлетворяющих условию: Yi-1i>Yi+1 (для первого и последнего элементов массива условие не проверять)

18.

Даны одномерные массивы X и Z вещественных чисел. Вставить после каждого отрицательного элемента Хi массива Х очередной элемент Zi массива Z .

19.

Даны одномерные массивы X и Z вещественных чисел. После каждого элемента массива Х вставить очередной отрицательный элемент массива Z.

20.

Сформировать массив Y целых чисел из массива Х по принципу Y1=X1, Yi=Xj, если Xj>Xj-1.

21.

Для массива Х целых чисел найти n и , где - существует

22.

Для массива Х целых чисел найти n и , где Xn>B

23.

В массиве Xn каждый элемент равен 0, 1 или 2. Переставить элементы так, чтобы сначала располагались все нули, затем все единицы и, наконец, все двойки (дополнительного массива не заводить).

24.

Дан одномерный массив вещественных чисел. Все его элементы, не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы – в конец массива (новый массив не заводить).

25.

Даны два целочисленных массива Х и Y. В массиве Х выбрать такие К идущих подряд элементов Хi+1, Xi+2, …, Xi+k, чтобы Xi+1=Y1, Xi+2=Y2, …, Xi+k=Yk.

26.

Задан массив Х вещественных чисел. Найти длину К самой длинной “пилообразной” последовательности идущих подряд чисел:

Xp+1< Xp+2> Xp+3 <…>Xp+k

27.

Даны два упорядоченных целочисленных массива A(A12<..m) и B(B12<..n). Образовать из этих элементов упорядоченный массив С12<..<Сn+m.

28.

Заданы три числа А, В и С, которые обозначают число, месяц и год. Найти номер N этого дня с начала года. Високосный год – это год, у которого номер делится на 400 или у которого номер делится на 4, но не делится на 100.

29.

Дана последовательность ненулевых целых чисел. Напечатать сначала все отрицательные числа этой последовательности в прямом порядке, а затем положительные – в обратном порядке.

30.

Дан массив вещественных чисел, содержащий 25 элементов. Определить номер элемента, с которого начинается самая длинная последовательность нулей.
^

Задача №2.


№ вар.

Условие

1.

Записать в массив В целых чисел в порядке возрастания отрицательные элементы массива С. Вычислить произведение элементов массива В с помощью функции.

2.

Записать в массив В целых чисел в порядке убывания отрицательные элементы массива С. Вычислить сумму элементов массива В с помощью функции.

3.

Записать в массив В вещественных чисел разности Хi - , где Хi - элемент массива Х, а – математическое ожидание. Вычислить дисперсию

с помощью функции.

4.

Для функции y=a*cos(wx+d) найти максимум, последний минимум и значение аргумента, при которых они достигаются. Х изменяется от 0 до 5 с шагом 0.08. Для вычисления Y использовать функцию.

5.

Задана квадратная матрица а(6,6) вещественных чисел. Построить одномерный массив, состоящий из элементов матрицы, являющихся наименьшими по величине в каждой строке. Наименьшие элементы находятся с помощью подпрограммы.

6.

Задана матрица А(6,6) вещественных чисел. Если какой-либо столбец матрицы, кроме первого и последнего, содержит все “1”, то заменить каждую “1” на сумму соседних в соответствующей строке элементов. Поиск столбца со всеми “1” организовать в подпрограмме.

7.

Заданы две квадратные целочисленные матрицы А и В. Составить матрицы А’ и В’ путем построчной сортировки матриц А и В соответственно. Найти С=А’*В’, сортировку в строках и умножение матриц выполнить при помощи подпрограмм.

8.

Заданы две квадратные целочисленные матрицы А и В. Переставить строки матриц по признаку возрастания сумм элементов в строках и вычислить А*В-В’, где В’ – транспонированная матрица. Вычисление суммы в строке, умножение и транспонирование матриц организовать и использование подпрограмм.

9.

Заданы две матрицы А и В целых чисел. Преобразовать их в матриц логических значений А’ и В’ по принципу:

a’[i][j]=’истина’, если a[i][j]>k,

a’[i][j]=’ложь’, если a[i][j]
где r – некоторая константа.

Найти произведение и сумму матриц А’ и В’. Логическое сложение и умножение матриц организовать в виде подпрограмм.

10.

Даны две квадратные матрицы вещественных чисел А и В. Вычислить квадрат той из них, у которой меньше сумма диагональных элементов. Подсчет суммы диагональных элементов выполнить в подпрограмме.

11.

Задана матрица А(7,7) целых чисел. Переставить в главную диагональ наименьшие элементы каждой строки и отсортировать главную диагональ по убыванию. Поиск наименьших элементов в строках и сортировку организовать с помощью подпрограмм

12.

Составить подпрограмму для вычисления произведения целочисленных матриц А и В. Проверить ее работоспособность на конкретном примере. Проверить работоспособность подпрограммы на примере вычисления А*В-В*А, где А и В – квадратные матрицы.

13.

Задана матрица А(5,5) вещественных чисел. Если строка i содержит все ”0”, заменить каждый “0” на сумму соседних элементов из строк i+1 и i-1 (1

14.

Задана матрица А(7,7) целых чисел. Найти столбец с наибольшей суммой элементов. Поменять местами наибольший элемент каждой строки с соответствующим элементом данного столбца. Организовать поиск столбца и наибольшего элемента в строке с помощью подпрограмм.

15.

Задана матрица А(10,10) вещественных чисел. Поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что в матрице числа не повторяются. Поиск max и min элементов организовать с помощью подпрограммы.

16.

Заданы две матрицы вещественных чисел А и В. Определить, в какой из матриц больше строк, содержащих все 0. Подсчет количества нулевых строк в матрице выполнить в подпрограмме.

17.

Из разряженной матрицы целых чисел А (размером m,n) (матрица содержит 0 значительно больше, чем других значений) образовать вектор, не содержащий нулевых элементов. Составить подпрограмму для восстановления разреженной матрицы из вектора.

18.

Составить подпрограмму для численного интегрирования функции методом левых прямоугольников. Проверить работоспособность подпрограммы на конкретном примере.

19.

Составить подпрограмму для численного интегрирования функции методом правых прямоугольников. Проверить работоспособность подпрограммы на конкретном примере.

20.

Составить подпрограмму для численного интегрирования функции методом трапеций. Проверить работоспособность подпрограммы на конкретном примере.

21.

Составить подпрограмму для сложения полиномов. Проверить ее работоспособность на конкретном примере.

22.

Составить подпрограмму для определения количества вхождений одной строки в другую. Проверить ее работоспособность.

23.

Составить подпрограмму для нахождения в массиве целого числа, встречающегося наибольшее количество раз. Проверить ее работоспособность.

24.

Составить подпрограмму для подсчета в строке операций отношения (включая двухсимвольные). Проверить ее работоспособность.

25.

Составить подпрограмму, которая из двух матриц n x m формирует третью такого же размера, перенося в нее ту строку исходной матрицы, произведение элементов в которой больше, чем в соответствующей строке второй матрицы. Проверить работоспособность подпрограммы.

26.

Составить подпрограмму, которая из исходного массива чисел формирует массив из n чисел, значения которых отличаются от среднего арифметического массива на величину, меньшую, чем у других чисел в массиве. Проверить работоспособность подпрограммы.

27.

Составить подпрограмму, которая массив целых чисел, содержащий некоторые повторяющиеся значения, преобразует таким образом, что вначале располагаются числа, встречающиеся наибольшее число раз, а в конце – наименьшее. Проверить работоспособность подпрограммы.

28.

Составить подпрограмму, которая переставляет символы в строке таким образом, что вначале располагаются символы, встречающиеся в строке наименьшее число раз, а в конце – наибольшее. Проверить работоспособность подпрограммы.

29.

Составить подпрограмму, которая принимает в качестве исходных данных значения некоторой функции y=f(x), заданные в таблице (массив), и определяет количество экстремумов этой функции. Проверить работоспособность подпрограммы.

30.

Составить подпрограмму, которая из массива чисел выбирает только те, которые больше среднего арифметического элементов, находящихся слева от рассматриваемого числа, и формирует из них массив. Проверить работоспособность подпрограммы.



Учебное издание


МЕТОДИЧЕСКИЕ УКАЗАНИЯ И КОНТРОЛЬНЫЕ ЗАДАНИЯ ПО ДИСЦИПЛИНЕ
«ОСНОВЫ ПРОГРАММИРОВАНИЯ И АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ»

для студентов заочной формы обучения
специальностей 7.080403 и 7.091501
Язык С и С++. Часть 1


Составители: Алексей Борисович Кунгурцев

Руслан Алексеевич Тарасенко



Схожі:

Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания к выполнению курсовой работы по дисциплине «Основы маркетинга» для студентов 2 курса дневной формы обучения
Бобрушева В. В. Методические указания к выполнению курсовой работы по дисциплине «Основы маркетинга» для студентов 2 курса дневной...
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания и задания по дисциплине «Статистика. Часть 1» для студентов экономических специальностей всех форм обучения печ
Статистические показатели, Статистическое наблюдение, Сводка и группировка статистических данных, Средние величины Методические указания...
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания по выполнению расчётно-графического задания
В методических указаниях приведены варианты расчетно-графического задания для студентов дневной формы обучения, указания по их оформлению,...
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания к самостоятельной работе студентов при изучении курса «строительное материаловедение» для студентов заочной формы обучения
Рассмотрено и одобрено на заседании цикловой комиссии специальных дисциплин Бахчисарайского строительного техникума Национального...
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconЗадания по дисциплине «Ораторское искусство» для студентов дневной и заочной формы обучения Задание Прочитать и сделать контент-анализ следующих работ
Задание Прочитать обвинительную и защитительную речь выдающегося юриста-оратора. Выяснить их особенности и структуру
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания к практическим занятиям №1÷7 по дисциплине: "Размерный анализ технологических процессов" для студентов специальности 09. 0202
Размерный анализ технологических процессов для студентов специальности 09. 0202 «Технология машиностроения» дневной и заочной форм...
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания к подготовке и защите магистерских работ по специальности
Методические указания к подготовке и защите магистерских работ по специальности 050206 «Менеджмент внешнеэкономической деятельности»...
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconГульнар Ибрагимова, Таир Ибрагимов инновационные методы организации самостоятельной работы студентов заочной формы
В статье рассматриваются элементы инновационных методов повышающих эффективность индивидуальной работы студента заочной формы обучения....
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодичні вказівки до лабораторних робіт з курсу загальної фізики. Розділ 4: «Коливання та хвилі», Опанасюк А. С, Панченко Л. М., 1999
Физика. Методические указания и контрольные задания для студентов-заочников. М. «Высшая школа», 1987 г
Методические указания и контрольные задания по дисциплине «основы программирования и алгоритмические языки» для студентов заочной формы обучения iconМетодические указания рассмотрены и утверждены на заседании кафедры Технология машиностроения
Технологические методы проектирования и производства заготовок деталей машин для студентов специальностей 09. 0202, 09. 0203 дневной...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©te.zavantag.com 2000-2017
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи