Составление программ и алгоритмизация задач по дисциплине "Объектно-ориентированное программирование"

 

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

Криворожский институт

ЧВУЗ «Кременчугский университет экономики, информационных технологий и управления»

Факультет - инженерный

Кафедра технической кибернетики

Специальность 7.0901402 «Гибкие компьютеризированные системы и робототехника»





МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению лабораторных работ

по дисциплине

«Объектно-ориентированное программирование»

для студентов дневной и заочной форм обучения












Кривой Рог 2008


СОДЕРЖАНИЕ


ВВЕДЕНИЕ

Лабораторная работа №1

Лабораторная работа № 2

Лабораторная работа №3

Лабораторная работа №4

Лабораторная работа №5

ЛИТЕРАТУРА



ВВЕДЕНИЕ


Лабораторные работы по дисциплине Объектно-ориентированное программирование выполняются студентами 2 курса специальности Гибкие компьютеризованные системы и робототехника дневной и заочной учебы.

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

Язык программирования BC является частью программной среды Borland C++, которая включает в себя не только соответствующий компилятор, но и текстовый редактор, компоновщик, загрузчик, отладчик и другие средства, что убыстряет процесс создания программы. Кроме того, возможности языка BC расширяются дополнительными программными средствами - модулями. Потому владение приемами работы в среде Borland C++ является крайне необходимым.

Система Borland C++, как одно из средств автоматизации программирования, является составной частью операционной системы MS DOS или Windows определенной версии. Потому студентам необходимо знать особенности файловой системы, владеть средствами работы с файлами и каталогами (папками) собственно операционной системы или оболочки Norton Commander.



ОБЩИЕ СВЕДЕНИЯ


Структура программы <file:///D:\Documents\CD_RW\Disk_OOP\GL3.htm>

Программа состоит из одной или более функций, причем какая-нибудь из них (главная) обязательно должна называться main( ). Описание функции состоит из заголовка и тела. Заголовок состоит из директив препроцессора типа #include и имени функции.

В разделе мы указываем, какие файлы мы будем использовать в качестве библиотек. Например:


#include <stdio.h>


Эта строка указывает компилятору, что нужно включить информацию, содержащуюся в файле stdio.h.

Отличительным признаком имени функции служат круглые скобки, а аргумент может и отсутствовать. Тело функции заключено в фигурные скобки и представляет собой набор операторов, каждый из которых оканчивается символом "точка с запятой".

В простейшем случае программа представляет собой одну единственную функцию main. Если функция main получает параметры и возвращает результат, то она объявляется так:


int main(int argc) { /* операторы*/

}

return(значение);


Если функция main не получает параметры и не возвращает результат, то она объявляется так:


void main()

{ /* операторы*/

}


Комментарии в программе либо оформляются следующим образом:


/* комментарий*/ или // комментарий.


Основные типы данных <file:///D:\Documents\CD_RW\Disk_OOP\GL3.htm>

К основным типам данных языка C/C++ относятся:

·целые числа (int, short int, long и др.);

·дробные (действительные) числа (float, double и др.);

·символы (char);

·логические bool.

Переменные могут быть объявлены в любом месте программы до их использования.

Например, объявляем целочисленные переменные: int a,b;

Строка в С++ это массив символов. Объявление: char Имя [Длина];

Объявим строковую переменную (массив) st, состоящую из 15 символов: char st[15];

Константы также могут быть объявлены в любом месте программы следующим образом: const n=7;

Арифметические операции

В С++ определены все четыре арифметических операции над числовыми переменными:

+ - сложение; - вычитание; * - умножение; / - деление вещественное;

Кроме этого для данных типа int предусмотрена операция % - получение остатка от целочисленного деления.

Например: 5 % 2=1

Инструкция присваивания <file:///D:\Documents\CD_RW\Disk_OOP\GL3.htm>

Переменную можно изменять при помощи операции присваивания. В языке С++ она обозначается знаком равенства.

Например: x = 12;

В С++ поддерживается сокращенная форма записи:


ИнструкцияСоответствующая "обычная"инструкция присваиваниях + +x = x + 1х--x = x - 1х += уx = x + уx - =ух = х - ух *= ух = х*ух %= уx = x % у

Функции ввода-вывода <file:///D:\Documents\CD_RW\Disk_OOP\GL3.htm>

Функция printf выводит на экран значения переменных либо строку символов, заключенных в двойные кавычки.

Синтаксис: printf(Формат, СписокПеременых);

Формат вывода задается в строке форматирования, которая помимо спецификатора формата может содержать текст и управляющие символы. Значение первой переменной выводится в соответствии с первым спецификатором формата, второй - со вторым, и т. д.Спецификаторы формата (необязательный параметр n задает ширину поля вывода).


СпецификаторФорма вывода%ni %ndДесятичное число со знаком%nuБеззнаковое целое десятичное число%n.mfДробное число с десятичной точкой. Необязательный параметр m задает количество цифр дробной части%neДробное число с десятичной точкой или, если число не может быть представлено в форме с десятичной точкой, в экспоненциальной форме%nsСтрока символов%ncСимвол

Управляющий символ \ n переводит курсор в начало следующей строки

Например, вывести значения целочисленной переменной а и дробной x (с точностью до 2-го знака после запятой) с переводом курсора на следующую строку.


printf(a=%d x=%5.2%\n,a,x);


Заголовочный файл: <stdio.h>

Функция scanf вводит с клавиатуры значения переменных, в соответствии с указанным спецификатором формата. Первая переменная получает значение в соответствии с первым спецификатором формата, вторая - со вторым и т. д.

Синтаксис:


scanf(Формат, СписокАдресовПеременных);


В качестве параметра функции scanf должны передаваться адреса переменных, а не их имена.


СпецификаторВводит%i %dДесятичное число со знаком%uБеззнаковое целое десятичное число%f %eДробное число%sСтрока символов%cСимвол

Например, ввести значения целочисленной переменной а и дробной x:


scanf(%d %f,&a,&x);

Заголовочный файл: <stdio.h>


Функция getch возвращает код символа нажатой клавиши. Функция getch не выводит на экран символ, соответствующий нажатой клавише.

Например:


getch() ; //ожидание нажатия любой клавиши

Заголовочный файл: <conio.h>



ЛАБОРАТОРНАЯ РАБОТА №1


Тема: Использование математических функций


Математические функции содержатся в модуле math.h. Поэтому для того, чтобы их использовать необходимо подключить его в разделе #include.

Математические функции


abs(x), fabs(x)Возвращает целое (abs) или дробное (fabs) абсолютное значение аргумента, в качестве которого можно использовать выражение соответствующего типа.acos(x), asin(x), atan(x)Возвращает выраженную в радианах величину угла, косинус, синус или тангенс которого передан соответствующей функции в качестве аргумента. Аргумент функции должен находиться в диапазоне от -1 до 1.sin(x), cos(x), tan(x)Возвращает синус, косинус или тангенс угла. Величина угла должна быть задана в радианах.exp(x)Экспонента - sqrt(x)Корень квадратный аргумента - pow(x,y)Возведение в степень. Возвращает значение log(x)Логарифм натуральный аргументаlog10(x)Десятичный логарифм

Пример выражения:



В С++ это выражение будет выглядеть так


0.3*pow((pow(sin(x),2)-pow(cos(x),2)/exp(x),5)


Задача 1

Вычислить значение функции (значения переменных принимать самостоятельно)



#include <stdio.h>

#include <conio>

#include <math.h>main ()

{

float x,y,z; //описываем переменные

printf("x="); scanf("%f",&x);("y="); scanf("%f",&y);=sqrt(fabs(sin(x)+cos(y)))/pow(sin(x)/cos(y),2)*log(fabs(x));("%5.3f",z); //выводим значение дробной переменной z с

точностью до 3 знаков после запятой

getch();

}


№ варЗадание№ варЗадание116217318419520621722823924102511261227132814291530

ЛАБОРАТОРНАЯ РАБОТА №2


Тема: Условный оператор IF.Операторы сравнения и логические функции. Оператор SWITCH


Операторы IF -условный оператор и SWITCH - оператор выбора варианта служат для организации разветвляющихся алгоритмов. Они позволяют выбрать для выполнения один из простых или составных операторов или не выбрать ни одного в зависимости от условия разветвления.

Условный оператор IF имеет следующую форму:


IF(B) S1; ELSE S;


Где B - логическое выражение (условие разветвления);

S1 - операторы, выполняемые в случае, если логическое выражение верно

S2 - операторы, выполняемые в случае, если логическое выражение неверно

Таким образом, с помощью оператора IF можно выбрать один из двух альтернативных вариантов процесса вычислений. Условные операторы могут быть вложенными, т.е. после ELSE может стоять другой IF.

В логических выражениях используют следующие операторы сравнения:


== (два знака равенства) - равно;

!= - не равно. Остальные операции стандартны: >,>=, <,<=


Если условий несколько, то можно применять логические операции: &&(И), ||(ИЛИ), !(НЕ). Например:

IF (A>B && B>0) - т.е. если одновременно выполняются два условия (А>B и B>0)

! - это операция логического отрицания.

Например:


IF ! (A==B) ... - если А не равно В


Задача 2а

Вычислите значение функции в зависимости от заданного условия.



#include <stdio.h>

#include <conio>

#include <math.h>main ()

{a,b,y;("a="); scanf("%f",&a);("b="); scanf("%f",&b);(a>b) y=a/b+2; else if (a==b) y=-71; else y=(a-5)/a;

printf("%5.3f",y);();

}


№ варЗадание№ варЗадание1617181920212223242526.27.282930

Оператор SWITCH используют для разветвления программы по нескольким направлениям. Он имеет следующую структуру:


switch(e)

{

case c1:s1; break;

case c2:s2; break;ck:sk; break;:s;

}

Где: е- значение целочисленной переменной;

с1, с2,сk - значения, которые она принимает;

s1,s2,sk - операторы, которые выполняются, если переменная е принимает соответствующее значение. Если операторов несколько, они заключаются в операторные скобки {}

Если значение переменной e не равно ни одному из указанных, выполняются операторы, которые идут после default.


Задача 2б

Составить программу, которая запрашивает порядковый номер месяца и выводит его название на экран.


#include <stdio.h>

#include <conio.h> main()

{

printf("Введите номер месяца -");

int mes; scanf("%d",&mes);(mes)

{1,2,12:printf("зима"); break;3,4,5:printf("весна"); break;6,7,8:printf("лето"); break;9,10,11:printf("осень"); break;:printf("некорректный ввод!!!");

}

getch();

}


Задание выбирается по последней цифре номера варианта


№ варЗадание№ варЗадание1Составить программу, которая запрашивает порядковый номер дня недели и выводит его название на экран.6Составить программу, которая выводит название цветов радуги, запрашивая порядковый номер цвета.2Составить программу, которая возвращает прописью введенное число в диапазоне от 0 до 107Составить программу, которая переводит арабские числа в римские в диапазоне от 1 до 10.3Составить программу, которая запрашивает порядковый номер месяца и выводит его название на экран.8Составить программу, которая переводит числа из десятичной системы в шестнадцатеричную в диапазоне от 1 до 16.4Составить программу, которая будет дописывать слово «рубль» в правильной форме после введенного числа в диапазоне (1..20)9Составить программу, которая будет дописывать слово «часов» в правильной форме после введенного значения в диапазоне (1..24)5Составить программу, которая запрашивает порядковый номер знака зодиака (начиная с Рыбы) и выводит его название на экран.10Составить программу, которая запрашивает год (в диапазоне от 1976 до 2008) и выводит название года по китайскому календарю (год Дракона и т.д).

ЛАБОРАТОРНАЯ РАБОТА №3


Тема: Циклы. Реализация циклического процесса. Инструкции FOR, WHILE, DO WHILE


Циклы используют в случае, если некоторые действия надо выполнить многократно, каждый раз с новыми данными. Инструкции цикла определяют действия, которые надо выполнить многократно, и количество их повторений. К инструкциям цикла относят операторы FOR, WHILE и DO WHILE.

FOR - инструкция цикла, которая используется, если количество повторений тела цикла известно до начала его выполнения. Форма записи оператора такова:


for(Инициализация; УсловиеВыполнения; Изменение)

{инструкции цикла (тело цикла) - один или несколько операторов,

заключенных в операторные скобки}


Инициализация - инструкция инициализации счетчика циклов.

УсловиеВыполнения - выражение, значение которого определяет условие выполнения инструкций цикла. Инструкции цикла выполняются до тех пор, пока УсловиеВыполнения истинно.

Изменение - инструкция изменения параметра цикла. Как правило, эта инструкция изменяет значение переменной, которая входит В УсловиеВыполнения.

Например, переменная i изменяется от начального значения 1 до конечного 5 с шагом 1:


for(i=1;i<=5;i++) {}


Задача 3а

Вычислить сумму (произведение):



#include <stdio.h>

#include <conio>

#include <math.h>main ()

{x,y=1; int n;("x="); scanf("%f",&x); (n=2;n<=5;n++)// переменная I изменяется от 2 до 5 с шагом 1

y*=exp(-x)*log(x)*tan(x);("%5.10f",y);();

}


№ варЗадание№ варЗадание116217318419520621722823924102511261227132814291530

Инструкция цикла WHILE носит название цикла с предусловием, так как анализ конца цикла производится до выполнения операторов тела цикла. Она используется, когда количество повторений операторов цикла заранее неизвестно и определяется в процессе выполнения цикла. При определенных условиях цикл не выполняется ни разу.

Синтаксис:


while(УсловиеВыполнения)

{Инструкции цикла (тело цикла)}


Сначала проверяется значение выражения УсловиеВылолнёния. Если. условие истинно, то выполняются инструкции цикла (тело цикла). Затем снова проверяется значение выражения УсловиеВыполнения, и если оно истинно, инструкции цикла выполняются еще раз. И так до тех пор, пока значение выражения УсловиеВылолнения не станет неверным.


Задача №3b

Вычислить таблицу значений функций для значений аргумента x, который изменяется от xn до xk с шагом dx



#include <stdio.h>

#include <conio.h>

#include <math.h>main()

{xn,xk,dx,x,y;("xn="); scanf("%f",&xn);("xk="); scanf("%f",&xk);("dx="); scanf("%f",&dx);=xn; //присваиваем переменной x начальное значение

while (x<=xk)

{=pow(tan(x/2),2)*exp(-2*x)*log(fabs(x));("x=%1.1f y=%f\n",x,y);+=dx; //значение x возрастает на величину шага

}();

}


№ варЗадание№ варЗадание116217318419520621722823924102511261227132814291530

Цикл с постусловием do while имеет следующий синтаксис:


do{операторы цикла} while(e);


Цикл выполняется до тех пор, пока выражение e имеет значение "истина". В отличие от цикла while , в котором проверка условия окончания цикла делается до выполнения тела цикла, в цикле do такая проверка имеет место после выполнения тела цикла. Следовательно, тело цикла do будет выполнено хотя бы один раз, даже если выражение e имеет значение "ложь" c самого начала. Цикл do аналогичен циклу repeat в языке Паскаль, отличаясь от него лишь тем, что цикл repeat выполняется до тех пор, пока некоторое условие выхода из цикла не становится истинным, а цикл do выполняется все время, пока некоторое условие остается истинным!


Задача №3с

Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -100…100, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести значение наибольшего по модулю числа.


#include <stdio.h>

#include <conio.h>

#include <math.h>main()

{x,max=0;

{ printf("x="); scanf("%d",&x);(x>=-100 && x<=100 && max<abs(x)) max=x;

}(x>=-100 && x<=100);("max=%d",max);

getch();

}

Еще один пример:

Обеспечить ввод с клавиатуры последовательности из целых чисел

(диапазон от -20 до 10, конец серии - ввод нуля). После окончания ввода программа должна вывести количество положительных и четных чисел

Для определения кратности числа можно воспользоваться операцией %, которая возвращает остаток от целочисленного деления. Эта операция применима только к переменным целого типа (int). Например, 5%2==1, 4%2== 0


#include <stdio.h>

#include <conio.h>

#include <math.h>main()

{x,k;

{ printf("x="); scanf("%d",&x);(x<=10 && x>0 && x%2==0) k++;

}(x!=0);("k=%d",k);();

}


№ варЗадание№ варЗадание1Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -8…18, конец серии - после ввода нуля). После окончания ввода программа должна вывести значение наименьшего положительного числа, кратного 3.16Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -27…27, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести количество отрицательных четных введенных чисел.2Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -14…18, конец серии - после ввода нуля). После окончания ввода программа должна вывести среднее значение положительных чисел17Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -24…24, конец серии - после ввода нуля). После окончания ввода программа должна вывести среднее значение отрицательных четных чисел3Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -38…18, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести количество положительных введенных чисел.18Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -25…25, конец серии - после ввода нуля). После окончания ввода программа должна вывести значение наименьшего положительного четного числа.4Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -21…21, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести значение наименьшего положительного четного числа.19Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -38…18, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести среднее арифметическое положительных введенных чисел.5Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -29…29, конец серии - ввод нуля). После окончания ввода программа должна вывести количество четных чисел .20Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -12…12, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести произведение положительных четных чисел.6Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -25…25, конец серии - ввод нуля). После окончания ввода программа должна вывести значение наименьшего по модулю четного числа.21Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -31…31, конец серии - ввод нуля). После окончания ввода программа должна вывести значение набольшего отрицательного кратного 3 числа.7Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -30…30, конец серии - после ввода нуля). После окончания ввода программа должна вывести количество отрицательных, кратных 3 чисел22Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -24…24, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести сумму положительных нечетных чисел.8Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -50…50, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести значение наибольшего по модулю числа.23Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -40…40, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести среднее арифметическое всех чисел, кратных 5.9Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -27…27, конец серии - ввод нуля). После окончания ввода программа должна вывести количество четных и кратных 3 чисел.24Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -29…29, конец серии - ввод нуля). После окончания ввода программа должна вывести количество отрицательных кратных 3 чисел.10Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -17…17, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести среднее арифметическое модулей отрицательных чисел.25Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -17…17, конец серии - ввод нуля). После окончания ввода программа должна вывести количество чисел кратных 3 .11Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -14…14, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести сумму отрицательных четных чисел.26Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -45…45, конец серии - ввод нуля). После окончания ввода программа должна вывести значение наибольшего по модулю числа, кратного 3.12Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -55…55, конец серии - после ввод числа вне диапазона). После окончания ввода программа должна вывести среднее арифметическое чисел, кратных 427Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -18…8, конец серии - после ввода нуля). После окончания ввода программа должна вывести значение наибольшего отрицательного числа, кратного 3.13Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -45…45, конец серии - после ввода нуля). После окончания ввода программа должна вывести значение наименьшего из отрицательных нечетных чисел28Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -55…24, конец серии - после ввода нуля). После окончания ввода программа должна вывести значение наибольшего из отрицательных четных чисел14Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -34…34, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести наибольшее из отрицательных кратных 3 чисел.29Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -27…27, конец серии - ввод числа вне диапазона). После окончания ввода программа должна вывести количество отрицательных кратных 4 введенных чисел.15Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -19…19, конец серии - ввод нуля). После окончания ввода программа должна вывести произведение отрицательных кратных 3 чисел.30Обеспечить ввод с клавиатуры последовательности из целых чисел (диапазон -30…30, конец серии - после ввода нуля). После окончания ввода программа должна вывести сумму отрицательных, кратных 3 чисел

ЛАБОРАТОРНАЯ РАБОТА №4


Тема: Организация и обработка данных при помощи массивов


Массив - это n-мерная совокупность однотипных элементов. Данные объединяют в массивы, если необходимо выполнить одни и те же действия над определенным количеством однотипных значений. Массивы объявляются следующим образом:

float a[10]; //одномерный массив, состоящий из 10 элементов, каждый из которых вещественного типа

или

int b[3][3]; //двухмерный массив (матрица 3x3} состоящий из элементов целочисленного типа

Обращение к элементу массива по ходу выполнения программы формируется в виде имени массива и списка индексов в квадратных скобках:

a[i] - в первом случае;

b[i][j] - во втором случае.

Ввод-вывод и обработку элементов массивов обычно производят при помощи циклов. Если мы имеем дело с двухмерными массивами, то необходимо использовать вложенные циклы (задача №4b).

математический алгоритмизация программа циклический

Задача 4a

Сформировать одномерный массив, состоящий из N целочисленных элементов. После чего:

Найти произведение всех элементов массива, удовлетворяющих условию c<a[I]<d


#include <stdio.h>

#include <conio.h>main()

{ const n=7;i,c,d,k=0,pr=1;("c="); scanf("%d",&c);("d="); scanf("%d",&d);a[n];(i=1;i<=n;i++)

{ printf("a[%d]=",i); scanf("%d",&a[i]);(a[i]>c && a[i]<d) {k++; pr*=a[i];}

}

if (k==0) printf("чисел, удовлетворяющих условию не было!");

else printf("pr=%d",pr);

getch();

}


Еще пример:

Сформировать одномерный массив, состоящий из N целочисленных элементов. После чего: найти количество четных и количество нечетных элементов в массиве.


#include <stdio.h>

#include <conio.h>main()

{ const n=7;i,ch=0,nch=0;a[n];(i=1;i<=n;i++)

{ printf("a[%d]=",i); scanf("%d",&a[i]);(a[i]%2==0) ch++; else nch++;

}("ch=%d nch=%d",ch,nch);

getch();

}


Сформировать одномерный массив, состоящий из N целочисленных элементов. После чего:


№ варЗадание№ варЗадание1Найти, сколько элементов массива удовлетворяют условию c<=a[I]<=d16Найти произведение кубов всех элементов массива, удовлетворяющих условию c<=a[I]<=d2Найти произведение элементов массива, удовлетворяющих условию c<=a[I]<=d17Найти произведение последних L элементов массива3Найти, сколько отрицательных элементов удовлетворяют условию c<=a[I]<=d18Найти произведение первых L элементов массива4Найти, сколько положительных элементов удовлетворяют условию c<=a[I]<=d19Найти произведение отрицательных элементов массива, удовлетворяющих условию c<=a[I]<=d5Найти сумму кубов всех отрицательных элементов массива20Найти произведение положительных элементов массива, удовлетворяющих условию c<=a[I]<=d6Найти сумму кубов всех положительных элементов массива21Найти сумму отрицательных элементов массива, удовлетворяющих условию c<=a[I]<=d7Найти сумму квадратов всех отрицательных элементов массива22Найти сумму положительных элементов массива, удовлетворяющих условию c<=a[I]<=d8Найти сумму квадратов всех положительных элементов массива23Найти произведение кубов всех отрицательных элементов массива9Найти сумму кубов всех элементов массива, удовлетворяющих условию c<=a[I]<=d24Найти произведение кубов всех положительных элементов массива10Найти сумму квадратов всех элементов массива, удовлетворяющих условию c<=a[I]<=d25Найти произведение квадратов всех отрицательных элементов массива11Найти, сколько положительных, отрицательных и нулевых элементов в массиве26Найти произведение квадратов всех положительных элементов массива12Найти произведение квадратов всех элементов массива, удовлетворяющих условию c<=a[I]<=d27Найти произведение кубов всех элементов массива, удовлетворяющих условию c<=a[I]<=d13Найти, сколько четных и нечетных элементов в массиве28Найти произведение квадратов всех нечетных элементов массива14Найти произведение квадратов всех четных элементов массива29Найти, сколько четныхэлементов удовлетворяют условию c<=a[I]<=d15Найти произведение квадратов всех элементов массива, кратных 330Найти произведение всех нечетных элементов массива, удовлетворяющих условию c<=a[I]<=d

Заполнение массива случайными числами

Для инициализации генератора случайных чисел служит функция randomize();

Это функция содержится в библиотеке <stdlib.h>, которую необходимо подключить в разделе #include.

Функция random возвращает случайное число в заданном диапазоне.

Например, присвоить переменной x случайное число в диапазоне от А до В.


х=A+random(B-A+1)


Случайное число в диапазоне от 0 до 99:


х=random(100)



Задача 4b

Сформировать двухмерный массив, состоящий из N x N элементов (заполнить случайными числами в диапазоне от 10 до 100). После чего: найти сумму элементов столбца, в котором расположен минимальный элемент матрицы.


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>main()

{ const n=7;i,j,k=0,sum=0,min;a[n][n];();(i=0;i<n;i++)

{(j=0;j<n;j++)

{[i][j]=10+random(91);("%5d",a[i][j]);

}

printf("\n"); //переход на другую строку

}=a[1][1];(i=0;i<n;i++)(j=0;j<n;j++)

if (min>a[i][j])

{min=a[i][j]; k=j;}(i=0,i<n,i++)+=a[i][k];("min=%d k=%d\n",min,k);("sum=%d",sum);();

}


Еще пример:

Сформировать двухмерный массив, состоящий из N x N элементов (заполнить случайными числами в диапазоне от 10 до 100). После чего: сформировать одномерный массив из сумм минимальных и максимальных значений элементов строк.


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>main()

{ const n=3;i,j,min,max;a[n][n];mas[n];();(i=0;i<n;i++)

{(j=0;j<n;j++) {[i][j]=10+random(91);("%4d",a[i][j]);

}("\n");

}(i=0;i<n;i++)

{

min=a[i][0]; max=a[i][0];(j=1;j<n;j++)

{(min>a[i][j])min=a[i][j];(max<a[i][j])max=a[i][j];

}[i]=min+max;

}(i=0;i<n;i++)("%5d",mas[i]);();

}


Сформировать двухмерный массив, состоящий из N x N элементов (заполнить случайными числами в произвольном диапазоне). После чего:


№ варЗадание№ варЗадание1Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент16Сформировать одномерный массив из сумм элементов столбцов2Получить новую матрицу путем деления всех элементов данной матрицы на ее наименьший по модулю элемент17Сформировать одномерный массив из произведений элементов строк3Получить новую матрицу путем умножения всех элементов данной матрицы на ее наибольший по модулю элемент18Сформировать одномерный массив из произведений элементов столбцов4Получить новую матрицу путем умножения всех элементов данной матрицы на ее наименьший по модулю элемент19Сформировать одномерный массив из наименьших значений элементов строк5Получить новую матрицу путем сложения всех элементов данной матрицы с ее наибольшим по модулю элементом20Сформировать одномерный массив из наибольших значений элементов строк6Получить новую матрицу путем сложения всех элементов данной матрицы с ее наименьшим по модулю элементом21Сформировать одномерный массив из наименьших значений элементов столбцов7Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наибольшего по модулю элемента22Сформировать одномерный массив из наибольших значений элементов столбцов8Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наименьшего по модулю элемента23Сформировать одномерный массив из разницы наибольших и наименьших значений элементов столбцов9Заменить нулями все элементы, расположенные на главной диагонали и выше нее.24Сформировать одномерный массив из разницы наибольших и наименьших значений элементов строк10Заменить нулями все элементы, расположенные на главной диагонали и ниже нее.25Сформировать одномерный массив из суммы наибольших и наименьших значений элементов столбцов11Заменить нулями все элементы, расположенные на главной диагонали.26Сформировать одномерный массив из суммы наибольших и наименьших значений элементов строк12Сформировать одномерный массив из сумм элементов строк27Найти сумму элементов строки, в которой расположен максимальный элемент матрицы13Найти максимальное значение элементов этого массива, вычислить среднее арифметическое строки с этим элементом, указав номер данной строки в массиве.28Найти минимальное значение элемента этого массива, вычислить среднее арифметическое столбца с этим элементом, указав номер данного столбца в массиве.14Найти среднее арифметическое элементов каждой нечетной строки этого массива.29Найти среднее арифметическое элементов каждой четной строки этого массива.15Найти среднее арифметическое элементов каждого из нечетных столбцов этого массива.30Найти среднее арифметическое элементов каждого из четных столбцов этого массива.

Задача 4c

Сформировать одномерный массив, состоящий из 5 элементов и отсортировать его по возрастанию.


// Сортировка массива методом прямого выбора

#include <stdio.h>

#include <conio.h>

#define SZ 5 // размер массива main ()

{

int a[SZ]; // объявляем массив, состоящий из целочисленных элементов

int i,min,j,buf,k;

//формируем одномерный массив

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

{printf("a[%d]=",i); scanf("%d",&a[i]);

}

printf("\n"); //переход на другую строку

for (i = 0; i < SZ-1; i++)

{ // поиск минимального эл-та

// в части массива от а[1] до последнего эл-та

min = i; //запоминаем номер минимального элемента

for (j = i+1; j < SZ; j++)(a[j] < a[min]) min = j; // поменяем местами a[min] и a[i]= a[i]; a [i] = a [min] ; a[min] = buf;

}(k =0; k < SZ; k++)("%i ", a[k]); printf("\n");();

}


Еще пример:

Заполнить массив, состоящий из 12 элементов случайными числами в диапазоне от -100 до100. Сортировать их по убыванию и вывести на экран по 4 элемента в строке.


// Сортировка массива методом прямого выбора

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define SZ 12 // размер массиваmain ()

{();a[SZ];i,max,j,buf,k;(i = 0; i < SZ; i++)

{[i]=-100+random(201);("%5d",a[i]);

}("\n");(i = 0; i < SZ-1; i++)

{= i;(j = i+1; j < SZ; j++)(a[j] > a[max]) max = j; // поменяем местами a[min] и a[i]= a[i]; a [i] = a [max] ; a[max] = buf;

}(k =0; k < SZ; k++)

{("%i ", a[k]);((k+1)%4==0) printf("\n");

}();

}


Еще пример:

Ввести последовательность целых чисел (завершение ввода - «ноль») и напечатать их в порядке убывания по 5 элементов в каждой строке. Недостающие в строке элементы (если такие имеются) заменить единицами.

#include <stdio.h>

#include <conio.h>

#define SZ 100

void main ()

{a[SZ];

int i=-1,max,j,buf,k;

//формируем массив

do

{++; printf("a[%d]=",i); scanf("%d",&a[i]);

}

while (a[i]!=0); //условие окончания формирования массива - ввод нуля

k=i; //количество элементов в массиве

printf("\n");

//сортировка элементов

for (i = 0; i < k-1; i++)

{= i;(j = i+1; j < k; j++)(a[j] > a[max]) max = j;= a[i]; a [i] = a [max] ; a[max] = buf;

}

//вывод отсортированных элементов по 5 в строке

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

{("%5d ", a[i]); ((i+1)%5==0) printf("\n");

}

//заполнение оставшихся позиций единицами

for (i=1;i<=(k/5+1)*5-k;i++)(" %d",1);//четыре пробела перед знаком %();

}


№ варЗадание№ варЗадание1Заполнить одномерный массив, состоящий из 20 элементов случайными числами в диапазоне от 0 до 100. Сортировать полученный массив по убыванию и вывести на экран по 5 элементов в строке16Ввести последовательность целых чисел в диапазоне от 0 до 150 (завершение ввода - «Число вне диапазона») и напечатать их в порядке возрастания по 3 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить максимальным значением.2Ввести последовательность целых чисел (завершение ввода -«ноль») и напечатать их в порядке убывания по 3 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить нулями.17Три одномерных массива состоят из N=5 произвольных действительных компонентов каждый. Разместить минимальные компоненты этих массивов в порядке возрастания.3Три одномерных массива состоят из N=7 произвольных действительных компонентов каждый. Разместить максимальные компоненты этих массивов в порядке убывания.18Заполнить одномерный массив, состоящий из 10 элементов случайными числами в диапазоне от 0 до 100. Сортировать полученный массив по возрастанию и вывести на экран по 3 элемента в строке. Недостающие в строке элементы заменить минимальным значением.4Заполнить одномерный массив, состоящий из 20 элементов, случайными числами в диапазоне от 0 до 500. Сформировать другой массив, состоящий из элементов исходного, кратных 7. Сортировать полученный массив по убыванию.19Заполнить одномерный массив, состоящий из 50 элементов, случайными числами в диапазоне от 0 до 1000. Сформировать другой массив, состоящий из элементов исходного, являющихся четными числами. Сортировать полученный массив по возрастанию.5Пять одномерных массива состоят из N=10 произвольных действительных компонентов каждый. Разместить средние арифметические значения элементов этих массивов в порядке возрастания.20Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из сумм строк исходного и сортировать его по убыванию.6Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из произведений столбцов исходного и сортировать его по возрастанию.21Заполнить одномерный массив, состоящий из 50 элементов, случайными числами в диапазоне от 0 до 1000. Сформировать другой массив, состоящий из элементов исходного, кратных 7. Сортировать полученный массив по возрастанию.7Даны два двухмерных массива (3*3). Получить одномерный массив, элементы которого будут являться суммой соответствующих элементов исходного массива. Сортировать массив по убыванию22Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из сумм столбцов исходного и сортировать его по убыванию.8Даны два двухмерных массива (3*3). Получить одномерный массив, элементы которого будут являться произведением соответствующих элементов исходного массива. Сортировать массив по возрастанию.23Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сортировать массив по возрастанию и вывести по строкам.9Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из минимальных элементов строк исходного и сортировать его по убыванию.24Ввести последовательность целых чисел в диапазоне от -100 до 100 (завершение ввода -«Число вне диапазона») и напечатать их в порядке возрастания по 4 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить значением модуля минимального числа.10Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из элементов исходного, расположенных ниже главной диагонали и сортировать его по убыванию.25Заполнить двухмерный массив, состоящий из 4x3 элементов, случайными числами в диапазоне от 0 до 100. Сформировать двухмерный массив 6x2, состоящий из элементов исходного, расположенных по убыванию.11Заполнить одномерный массив, состоящий из 50 элементов, случайными числами в диапазоне от 0 до 1000. Сформировать другой массив, состоящий из четных элементов исходного. Сортировать полученный массив по возрастанию.26Ввести последовательность целых чисел в диапазоне от 0 до 150 (завершение ввода -«Число вне диапазона») и напечатать их в порядке возрастания по 3 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить значением среднего арифметического элементов массива.12Три одномерных массива состоят из N=10 произвольных действительных компонентов каждый. Разместить модули разности нечетных элементов этих массивов в порядке убывания.27Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из элементов исходного, расположенных вышеглавной диагонали и сортировать его по возрастанию.13Ввести последовательность целых чисел (завершение ввода - «ноль») и напечатать их в порядке возрастания по 4 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить единицей.28Три одномерных массива состоят из N=10 произвольных действительных компонентов каждый. Разместить суммы четных элементов этих массивов в порядке возрастания.14Заполнить одномерный массив, состоящий из 13 элементов случайными числами в диапазоне от 0 до 100. Сортировать полученный массив по убыванию и вывести на экран по 3 элемента в строке. Недостающие в строке элементы заменить суммой отрицательных элементов массива.29Заполнить одномерный массив, состоящий из 20 элементов, случайными числами в диапазоне от 0 до 500. Сформировать другой массив, состоящий из элементов исходного, кратных 3. Сортировать полученный массив по убыванию.15Ввести последовательность целых чисел (завершение ввода -«ноль»), вычесть из них наименьшее и напечатать их в порядке возрастания по 5 элементов в каждой строке. Недостающие в строке элементы (если такие имеются) заменить нулем.30Ввести последовательность целых чисел (завершение ввода -«ноль»), прибавить к ним наибольшее и напечатать их в порядке возрастания по 4 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить единицей.

ЛАБОРАТОРНАЯ РАБОТА №5


Тема: Функции работы со строками. Функции преобразования <file:///D:\Documents\CD_RW\Disk_OOP\GL3.htm>


Строковые переменные представляют собой массив символов и объявляются следующим образом: char s[15];

где 15 - максимально возможное число символов в строке. Обращение к отдельному символу строки происходит путем указания индекса (порядкового номера символа строке), начиная с нуля.

Например, выведем на экран второй символ в строке:

s=ABCD;

printf("%c",s[1]);


В результате выполнения фрагмента кода на экране будет отображен символ В

Для использования функций работы со строками необходимо добавить в раздел #include ссылку на заголовочный файл <string.h>

Функция strlen(s) возвращает длину строки s.

Пример: Ввести строку и подсчитать количество символов в ней.


#include<stdio.h>

#include<conio.h>

#include<string.h>main()

{s[15]; scanf("%s",&s); //вводим трокуa; a=strlen(s);

printf("%d",a);//выводим на экран количество символов();

}


Поскольку строки являются массивом символов, для их обработки часто используются циклы.

Еще пример:

Составить программу, которая подсчитывает в предложении количество символов k.


#include<stdio.h>

#include<conio.h>

#include<string.h>main()

{s[15];("%s",&s);a=0,i;(i=0;i<strlen(s);i++)

if (s[i]=='k') a++;("%d",a);();

}


Функция getch() возвращает нажатый символ (или его код) без вывода на экран.

Пример: выводить на экран нажатый символ и его код, пока не нажата клавиша Esc


#include<stdio.h>

#include<conio.h>main()

{ch;

{ = getch();

printf("%c -> %d\n",ch,ch); //печать символа и его кода с последующим

переходом на новую строку

}

while (ch!=27); //пока не нажата клавиша Esc

getch();

}

Функция strlwr(s) преобразует строчные символы строки в прописные (обрабатывает только буквы латинского алфавита). Функция strupr(s) производит обратное преобразование - прописные символы строки в строчные.

Пример: ввести строку и преобразовать ее к верхнему регистру.


#include <stdio.h>

#include <string.h>

#include <conio.h>main(void)

{st[15];("%s",&st);(strupr(st));

getch();

}


Функция strchr(s,ch) выполняет поиск символа ch в строке s и возвращает указатель на первый найденный символ или, если символ найден, null.

Функцию strrchr(s,ch) выполняет поиск символа ch в строке s и возвращает указатель на место последнего появления в строке заданного символа:

Пример: Ввести строку текста и вычислить номер позиции, в которой первый раз встречается буква А.


#include <stdio.h>

#include <string.h>

#include <conio.h>main(void)

{s[64];("%s",s);*ptr;

= strchr(s, 'A');(*ptr)(" %d\n", ptr - s+1);

else("Символ не найден\n");();

}


Функция strcat(s1,s2) объединяет строки s1 и s2 и записывает результат в строку s1.

Пример: Объединить вместе две строки.


#include <stdio.h>

#include <string.h>

#include <conio.h>main(void)

{

char s1[]="abc"; //задание первой текстовой константы

char s2[]="def"; //задание второй текстовой константы

strcat(s1,s2);("%s",s1);();

}

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

Преобразует символьную строку в значение типа floatПреобразует символьную строку в значение типа intПреобразует символьную строку в значение типа long intПреобразует символьную строку в значение типа doubleПреобразует символьную строку в значение типа long int


№ варЗадание№ варЗадание1Составить программу, которая подсчитывает количество предложений в тексте (считаем, что предложения разделяются точками и восклицательными и вопросительными знаками).16Ввести текст. После каждого слова записать в скобках его длину.2Ввести строку текста на английском языке строчными буквами. Изменить его таким образом, чтобы каждое слово начиналось с большой буквы.17Задана строковая последовательность 15*3+7. Вычислить значение выражения3Ввести предложение. Вывести на экран цепочку букв, с которых начинаются слова предложения.18Ввести предложение. Вывести на экран цепочку букв, которыми заканчиваются слова предложения.4Ввести строку текста и вычислить номер позиции, в которой первый раз встречается буква е19Ввести текст и подсчитать, сколько раз в нем встречается удвоенная буква 'м'5Задана строковая последовательность 15+3*5. Вычислить значение выражения20Ввести текст. После каждого предложения записать в скобках количество слов в нем.6Ввести строку текста на английском языке строчными буквами. Изменить его таким образом, чтобы каждое предложение начиналось с большой буквы.21Задана строковая последовательность 15/3+3. Вычислить значение выражения7Ввести текст. После каждого предложения записать в скобках количество символов в нем, включая пробелы.22Ввести произвольную строку, содержащую цифровые и буквенные символы. Подсчитать, сколько цифровых содержится в введенной строке8Ввести текст. Удалить из него слова с четными порядковыми номерами.23Ввести строку текста и вычислить номер позиции, в которой последний раз встречается буква и9Ввести текст и подсчитать, сколько раз в нем встречаются запятая и точка24Задана строковая последовательность 15*3. Вычислить значение разности10Ввести произвольную строку, содержащую цифровые и буквенные символы. Подсчитать, сколько нецифровых содержится в введенной строке25Ввести текст. После каждого предложения записать в скобках количество символов в нем, исключая пробелы.11Ввести текст. После слов с нечетными порядковыми номерами вставить знак вопрса.26Ввести текст. Удалить из него слова с нечетными порядковыми номерами.12Ввести текст. Определить на какую букву начинается каждое третье слово27Ввести текст. Определить на какую букву заканчивается каждое второе слово13Ввести произвольную строку, подсчитать, сколько слов в заданной строке оканчиваются буквой я28Ввести произвольную строку, подсчитать, сколько слов в заданной строке начинаются буквой к14Ввести строку текста и вычислить номер позиции, в которой последний раз встречается буква F29Ввести текст. Определить, на какую букву начинается пятое слово.15Ввести текст. Заменить каждое второе слово многоточием.30Ввести произвольную строку, содержащую цифровые и буквенные символы. Удалить из текста все цифровые символы


ЛИТЕРАТУРА


1.Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с.

2.Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с.

.Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с.

.Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с.

.Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с.


Министерство образования и науки Украины Криворожский институт ЧВУЗ «Кременчугский университет экономики, информационных технологий и управления»

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ