Сделай Сам Свою Работу на 5

Результат работы программы





Задача №6(44)

Текст задачи: Дано натуральное k. Определить k – ю цифру последовательности 12345678910111213 …, в которой выписаны подряд все натуральные числа.

Алгоритм :Вычисляем число которое содержит эту цифру и из неё путем отбрасывания вычисляем нужную нам цифру

Программный код:

#include<iostream.h>

#include<conio.h>

int main()

{

int k, chislo;

cout<<"\nВведите номер цифры в последовательности\n";

cin>>k;

int n=0,m=0,n1; // n ­ натуральное число из последовательности

while(m < k){ // m – номер цифры из последовательности

n++;

n1=n;

while(n1>0){ // Включение в последовательность цифр числа n

m++; // счетчик цифр

n1 = n1 / 10;

}

}

// Последнее число n содержит нужную К-ую цифру

cout << "n = " << n ;

cout << "m = " << m ;

while(m > k){ // Поск К-ой цифры в последовательности числа n

n = n / 10; // Отбрасываем последнюю цифру числа n

m--; //Получаем номер последней цифры числа n

}

chislo = n % 10; // Искомая к-ая цифра

cout << "Цифра=" << chislo;

getch();

return 0;

}

Результат работы программы:

Массивы

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



Массивы представляют собой последовательность пронумерованных элементов одного типа, последовательно расположенных в памяти. Все элементы массива имеют одно имя, но каждый элемент имеет свой номер, с помощью которого отличается от других элементов. Нумерация элементов массива начинается с нуля.

 

Одномерные массивы

Объявление массива отличается от объявления простой переменной указанием вслед за именем массива количества его элементов в квадратных скобках, например,

double x[100];

Здесь x – это имя массива из 100 элементов типа double. Так как нумерация элементов массива начинается с нуля, то первый элемент массива есть x[0], последний – x[99], не существует элемента x[100]. Массивы в языке C++ имеют всегда конкретную размерность, нельзя определять массивы переменной длины. Массив может состоять из элементов любых типов.



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

int days[] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Если размер массива не указан, то длину массива вычисляет компилятор по списку инициализации. Для приведенного примера это 12.

Если количество инициализаторов меньше заданной длины массива, оставшиеся элементы будут нулевыми. Задание слишком большого числа инициализаторов является ошибкой.

Оператор sizeof, примененный к массиву даст размер массива в байтах. Например, для days выражение sizeof(days) = 24, так как массив состоит из 12 элементов типа int, а размер int равен 2 байта.

Над массивами в целом нельзя выполнять какие-либо действия (присваивать, складывать т.п.), работать можно только с отдельными элементами.

Двумерные массивы

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

Двумерный массив рассматривается как одномерный, элементами которого являются массивы.

Память под многомерные массивы отводится построчно, то есть сначала размещаются первые n элементов, затем вторые и т.д.

 

Задача №7(59)

Текст задачи: Напишите программу, которая находит разность между наибольшим и наименьшим элементами массива.

Алгоритм: В цикле вводим элементы массива, затем предполагаем что максимальный и минимальный элементы, равны первому элементу массива, в следующем цикле сравниваем каждый элемент с минимальным (min) и максимальным (max), если a[i]<min то min=a[i], так же и с максимальным элементом, если a[i]>max то max=a[i], далее вычисляем разность максимального и минимального и выводим её на экран.



Программный код:

 

#include<iostream.h> // Директива препроцессора

#include<conio.h>

#include<stdlib.h>

int main() // Заголовок функции main

{

int x[100], min, max, r; // Объявление переменных и массива

int i;

clrscr(); // очистка экрана

randomize(); // генератор случайных чисел

for (i=0;i<100;i++) // Цикл for

x[i]=rand(); // Заполнение массива случайными числами

min = x[0]; //Занудение значения переменной min

max = x[0]; // Зануление переменной max

for (i=1; i<100; i++){ // цикл for

if (min > x[i]) // Поиск минимального значения

min=x[i];

else if (x[i] > max) // вложенный if, поиск максимального элемента

max=x[i];

} // окончание for

r=max-min; // вычисление разности

cout<< "\n Мнимальный элемент = " << min;

cout<< "\n Максимальный элемент = " << max;

cout<<"\n r= " << r << "\n";

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

cout<<" " << x[i]; // Вывод массива

cin.get();

return 0;

} // Завершение функции main

Результат работы программы:

Задача №8(64)

Текст задачи: Напишите программу, меняющую местами столбцы j и k матрицы 4*4.

Алгоритм: C помощью двойных циклов вводим массив размером 4*4, затем с помощью одинарного цикла меняем местами столбцы k и n. Выводим полученную матрицу

Программный код:

#include<iostream.h> // Дириктива препроцессора

#include<conio.h>

#include<math.h>

int main() // Заголовок функции main

{ // Начало функции main

int a[4][4],i,k,n,c,j,e; // Объявление переменных

cout<<"Vvedite nomer stolbcov k, n ";

cin>>k>>n;

for(i=0;i<4;i++) { // цикл for

for (j=0;j<4;j++) { // Вложенный цикл for

cout<<"a["<<i<<"]["<<j<<"]"; // Приглашение к вводу

cin>>a[i][j]; // Ввод с клавиатуры

}

}

cout<<"\n Vvedennaya matrica\n"; Вывод полученной матрицы

for(i=0;i<4;i++){

cout<<"\n";

for(j=0;j<4;j++) {

cout<<" "<<a[i][j];

}

}

for(i=0;i<4;i++){ // Цикл for

e=a[i][k]; // смена

a[i][n]=a[i][k]; // столбцов

a[i][k]=a[i][n]; // местами

}

cout<<"\n matrica 2\n"; // Вывод полученной матрицы

for(i=0;i<4;i++){

cout<<"\n";

for(j=0;j<4;j++) {

cout<<" "<<a[i][j];

}

}

getch(); //Задержка

return 0;

} // Окончание функции main

Результат работы программы:

 

Функции

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

 

Определение функции

Определение любой функции имеет вид:

 

тип – результата имя – функции(объявления аргументов)

{

объявления и инструкции

}

Отдельные части определения могут отсутствовать, например, следующая функция ничего не делает:

 

void dummy(){}

 

Тип результата функции void означает, что функция ничего не возвращает.

Вычисления в функции завершаются при достижении последней закрывающейся фигурной скобки } или при выполнении инструкции return. Когда функция завершает работу, управление предаётся в вызывающую программу той функции, которая следует за вызовом функции.

Если функция завершается инструкцией

 

return выр;

 

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

Функции могут возвращать значения любых типов. Например, следующая функция возвращает логическое значение true (истина), если её аргумент а больше b, иначе значением функции будет false (ложь).

 

bool greater(int a, int b)

{

return a>b;

}

 

Задача №9(75)

Текст задачи: Напишите функцию, аргументом которой является номер года. Функция должна возвращать 1, если год високосный и 0, если год невисокосный. Год является високосным, если его номер делится на 4 и не делится на 100 или делится на 400. В соответствии с этим правилом 1900-й год был невисокосным, а 2000-й – високосным.

Алгоритм: Пишем функцию которая проверяет, является ли год високосным, при положительном ответе функция принимает значение 1, иначе 0, затем сравниваем результат функции с 1, и если god(n)==1 то выводим что год високосный, иначе выводим что год не високосный.

Программный код:

 

// god: Проверяет является ли год високосным

int god(n) // Функция god

{

if (n%4==0 && n%100 !=0 || n%400==0) // Проверка условий

return 1; // Иструкция при истинном выражении

else

return 0; // Иструкция при ложном выражении

}

#include<iostream.h>

#include<math.h>

#include<conio.h>

int main() // Заголовок функции main

{

int n; //Объявление переменных

cout<<"Введите год ";

cin>>n; // Ввод с клавиатуры

if (god(n)==1) // Сравнение значения функции с 1

cout<<"Год високосный";

else

cout<<"Год не високосный";

getch();

return 0;

}

 

 

Задача №10(88)

Текст задачи: Напишите функцию, осуществляющую умножение двух квадратных матриц.

Алгоритм:

Программный код:

#include<iostream.h> // Директива препроцессора

#include<conio.h>

void matrica(double A[3][3], double B[3][3], double C[3][3]) // заголовок . // функции

{

int i, j, k; // Объявление переменных

double s; //

for(i=0;i<3;i++){ // Цикл for

for(j=0;j<3;j++){

s=0;

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

s =s+A[i][k]*B[k][j] ; // Вычисление элемента

C[i][j]=s;

}

}

}

int main() // Заголовок функции main

{

const int N=3; // Задаем размерность

const int M=3; // матрицы

double A[N][M], i,j,k,s; // Объявление переменных

cout<<"\n"<<"Введите матрицу А \n"; // Приглашение к вводу

for(i=0;i < N; i++){

for (j=0; j<M; j++){

cout <<"A ("<<i+1<<","<<j+1<<") ";

cin>>A[i][j]; // Ввод с клавиатура элементов матрицы А

}

}

double B[N][M]; // Объявление матрицы В

cout<<"\n"<<"Введите матрицу В \n"; // Приглашение к вводу

for(i=0;i < N; i++){

for (j=0; j<M; j++){

cout <<"B ("<<i+1<<","<<j+1<<") ";

cin>>B[i][j]; // ввод матрицы В

}

}

clrscr(); // Очистка экрана

cout<<"\nMatrica A"<<"\n"; // Вывод матрицы А

for(i=0;i < N; i++) { //

cout<<"\n"; //

for(j=0;j < M;j++) //

cout <<" "<<A[i][j]; //

}

 

cout<<"\n"<<"Matrica B\n"; // Вывод матрицы В

for(i=0;i < N; i++) { //

cout<<"\n"; //

for(j=0;j < M;j++) //

cout <<" "<<B[i][j]; //

}

double C[N][M]; // Объявление матрицы С

 

matrica(A, B, C); // Функция matrica

 

cout<<"\n"<<"Poluchennyi massiv \n"; // Вывод полученной матрицы

for(i=0;i < N; i++) { //

cout<<"\n"; //

for(j=0;j < M;j++) //

cout <<" "<<C[i][j]; //

}

getch(); // Задержка

return 0;

}

Результат работы программы:

 

 

 

Строки символов.

Понятие строки

Строки символов широко используются в программировании, так как общение пользователя с программой ведется, в основном, с помощью текстовых сообщений, состоящих из отдельных строк. Строка в языках Си и C++ это массив символов, ограниченный признаком конца строки, которым служит символ ’\0’ с нулевым кодом, например, массив s, определенный инструкцией

char *s[100];

может содержать строку длиной от 0 до 99 символов, так как из 100 символов, выделенных под массив, один занимает признак конца строки ’\0’. Данный символ может занимать любую позицию в массиве, поэтому строки могут иметь переменную длину. Если s[0]= ’\0’, то массив s содержит строку нулевой длины, иначе говоря, пустую строку.

Средства работы со строкам

Для вывода строк можно использовать оператор <<.

При вводе с помощью оператора >> в строку будут включены все символы до первого пробела, поэтому для ввода строк, содержащих любые символы лучше использовать функцию getline(char s[], int n), которая читает из входного потока не более n – 1 символа. Чтение символов прекращается при поступлении символа новой строки ’\n’ или достижении конца файла. Прочитанный символ новой строки ’\n’ не включается в s.

Существует довольно обширная библиотека функций для работы со строками. Их прототипы помещены в заголовочном файле string.h. Отметим некоторые их этих функций. В описаниях используется обозначение size_t для типа unsigned int. Данное обозначение вводится инструкцией

typedef unsigned int size_t;

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

size_t strlen(const char s[]);

возвращает длину строки s. Завершающий символ ’\0’ не учитывается.

char *strcpy(char *dest, const char *src);

копирует строку src в строку dest, возвращает указатель на копию dest.

int strcmp(const char *s1, const char*s2);

посимвольно сравнивает строки s1 и s2, причем сравниваются коды символов. Возвращается значение <0, если первый несовпадающий символ s1 имеет код меньше чем код соответствующего символа s2, значение >0, если первый несовпадающий символ s1 имеет больший код, чем символ s2 и 0 при полном совпадении строк.

 

Задача №11(105)

Текст задачи: Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд пробелы на один пробел.

Алгоритм: Создаем вторую строку в которую записываться все символы(не пробелы) и один пробел после символа, остальные будут отбрасываться.

Программный код:

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

int main()

{

char s[100]; // Массив под первую строку

char t[100]; // Массив под вторую строку

int i,k,j;

clrscr(); //Очистка экрана

cout<<"‚ўҐ¤ЁвҐ ЇҐаўго бва®Єг:\n";

for(i=0; s[i]!='\0'; i++){ //Перебор элементов первой строки

if(s[i]!=' ') // Формирование второй строки

t[j++]=s[i]; //

else { //

t[j++] = s[i]; //

while(s[i] == ' ' && s[i] != '\0' )

i++;

i--;

}

}

t[j]='\0';

cout<<t;

getch();

cin.get();

return 0;

}

Результат работы программы:

 

 

Макросы

Макросом или макроопределением называется идентификатор, связанный директивой #define с лексемой или последовательностью лексем. Определение макроса имеет вид:

 

#define МАКРОС ЗНАЧЕНИЕ

 

Здесь МАКРОС – это имя макроса. В имени макроса пробелы не допускаются. Препроцессор заменяет всякое вхождение макроса в тест программы значением, связанным с ним директивой #define, всюду от точки его определение в программе до конца файла. Если макрос входит в состав символьной или строковой константы, то замена не производится.

 

 

Задача №12(124)

Текст задачи: Напишите макрос для округления числа с плавающей точкой до ближайшего целого. Результат округления должен иметь целый тип.

Алгоритм:Описание макроса. Проверяем каким является число, положительным или отрицательным. Если число положительное: Вычитаем из него его целую часть и сравниваем её с 0.5, если больше то, прибавляем к целой части 1, если меньше, то вычитаем 1, и присваиваем её значению макроса. Если число отрицательное: Вычитаем из него его целую часть и сравниваем её с 0.5, если больше то, вычитаем из целой части 1, если меньше, то прибавляем 1, и присваиваем её значению макроса.

Программный код:

 

*/

#include<iostream.h>

#include<math.h>

#include<conio.h>

#define RND(x) ((x)>0?((x)-int(x)>0.5?int(x)+1:int(x)):(int(x)-(x) > 0.5 ?int(x)-1:int(x)))

int main()

{

double x;

clrscr();

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

cin>>x;

cout<<"Результат работы программы:\n" << RND(x);

cout<<"\n";

getch();

}

Результат работы программы:

 

 

Указатели

Указатель есть адрес некоторого объекта. Если p – указатель на объект, то *p есть сам объект. Адрес объекта возвращает оператор &, который ставится перед именем объекта.

 

int *pi; //pi – указатель на переменную целого типа

Существует унарный оператор &, выдающий адрес своего операнда. После выполнения инструкций

int i = 0;

pi = &i;

указатель pi будет содержать адрес переменной i (говорят, что pi ссылается на i).

Можно создавать указатели на величины любых типов.

Адресная арифметика

Как уже говорилось, указатели можно складывать и вычитать с целыми. Если p – указатель на некоторый элемент массива, то выражение p++ изменяет p так, чтобы он указывал на следующий элемент массива. Выражение p+=i изменяет p так, чтобы он указывал на i-й элемент, после того, на который он указывал ранее.

Если p и q указывают на элементы одного и того же массива, то к ним можно применять операторы сравнения ==, !=, <, <=, >, >=. Выражение p < q истинно, если p указывает на более ранний элемент массива, чем q.

Любой указатель можно сравнивать на равенство и неравенство с нулем. Если значение указателя равно нулю, это трактуется так, что указатель никуда не указывает.

Допускается вычитание указателей. Если p и q указывают на элементы одного и того же массива и p < q, то q - p +1 есть число элементов от p до q включительно.

Символьные указатели

Для работы со строками символов часто используются указатели на char. Их определение имеет вид:

char* pc;

Строковая константа, написанная в виде “Я строка” есть массив символов. Во внутреннем представлении этот массив заканчивается нулевым символом ‘\0’, по которому программа может найти конец строки. Адрес начала массива, в котором расположена строковая константа, можно присвоить указателю путем присваивания

pc = ”Я строка”;

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

cout << pc << ” длиной ” << strlen(pc) << ”символов”;

будет напечатано

Я строка длиной 8 символов

При подсчете символов строки учитываются и пробелы, а завершающий символ ’\0’ не учитывается.

 

Задача№13(126)

Текст задачи: Напишите функцию revers с использованием указателей.

Алгоритм: Алгоритм реверсирования состоит в следующем. Вводятся два счётчика: i с начальным значением, равным 0, то есть по номеру первого символа строки, и j с начальным значением, равным номеру последнего символа строки. Соответствующие символы меняются местами. Далее счётчик i увеличивается на 1, а j – уменьшается на 1 и меняются местами s[i] и s[j]. Так продолжается до тех пор, пока счётчики не «встретятся» на середине строки. Заметим, что средний символ ‘е’ останется на своём месте.

Программный код:

#include<iostream.h>

#include<conio.h>

#include<string.h>

void revers(char *s) // Функция revers с использованием указателей

{

int i,j;

char tmp;

for(i=0,j=strlen(s)-1;i<j;i++,j--)

tmp = *(s+i),*(s+i)=*(s+j),*(s+j)=tmp;

}

int main() // Заголовок функции main

{

const int MAX=100;

char s[MAX];

char copys[MAX];

int rez;

cin.getline(s,MAX);

strcpy(copys,s);

revers(s); // Реверсирование строки

cout<<"Reversirovnai ctroka: ";

cout<<s<<"\n";

cout<<copys<<((rez=strcmp(copys,s))<0?'<':

(rez==0?'=':'>'))<<s;

cout<<"\nRezultat cpavneninia ctrok rez= " <<rez<<"\n";

getch();

return 0;

}

Результат работы программы:

Список используемой литературы

1. Тарасов В.Л. Программирование на С++

Н. Новгород: Издательство ННГУ,2006.

2. Т.А. Павловская, Ю.А. Щупак. С/С++ Структурное и объектно-ориентированное программирование.

Санкт-Петербург: Издательство «Питер», 2010.

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.