Архив метки: с++

Листинг примера функций в языке Си.

Функции в языке Си.

Задание

Написать программу при помощи операторов цикла (без применения массивов и прямой адресации курсора) для распечатки на экране монитора указанного набора символов с использованием функций.

Набор символов

A D G J M
M D G J M
M J G J M
M J G J M
M J G D M
M J G D A

Листинг программы

#include <conio.h>
#include <stdio.h>

#include <windows.h>
//функция печати первой части строки 
void PartFirst(int countLine, char First)
{
   int i=1;
    do
	{
	  if (First< 'A') First='M';
	  printf ("%2c",First);
	  First--; First--; First--;
	  i++;
	} while (i<6-countLine+1);
}
//функция печати второй части строки 
void PartSecond(int countLine, char First)
{
   char newFirst=First;
   int i=1;
    do
	{
	  if (First>'M') First=newFirst;
	  printf ("%2c",First);
	  First++; First++; First++;
	  j++;
	} while (i< =countLine-1);
}
int main()
{
  int i,j,i1,j1;
  char c,c1,c2;
  char s[1000];
AnsiToOem("Задание: Написать программу, которая выводит на экран заданный набор" ,s);
puts(s);
c='A';
c1='A';
i1=6;
do
    {
c2='M';
if (i1<6)
   PartFirst(i1,c2);
j=1;
if (i1!=1)
  PartSecond(i1,cl);
c1+=3;
      printf ("\n");
i1--;
    }while (i1>=1);
  getch();
 return 0;
}

Листинг обработки одномерных массивов

Тема: Обработка одномерных массивов

Задание

Заполнить два массива, размером 20 и 30 элементов, соответственно, случайными целыми числами в диапазоне от –50 до 50. Из полученных двух массивов создайте два массива отдельно отрицательных и положительных чисел. Проведите сортировку полученных массивов по возрастанию. Для контроля результата сделайте распечатку массивов, в том числе исходного.
Сортировки проведите тремя методами. При использовании каждого из методов желательно использовать свой массив. Если количество массивов меньше трех, то один из массивов перед сортировкой надо скопировать в дополнительный массив и провести его сортировку.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#define   Nx 20
#define   Ny 30
#define   Nres 50

inline void rus()  // Русификация вывода в консольное окно
{
    setlocale( LC_CTYPE, ".1251" );
    setlocale( LC_MONETARY, ".1251" );
}
void randomize()
{
    srand(time(0));
}

unsigned int random(int range)
{
    return (rand() % range);
}

int main()
{

    int  i, j, range;
    rus();
    randomize();
    int x[Nx];
    int y[Ny];
    int pol[Nres];
    int otr[Nres];
    int pol2[Nres];
    range=100;
   for (i=0;i<Nx;i++)  {        /* i - is a namber of row       */
      *(x+i) = -50+random(range);
                       }
  // Вывод одномерного массива
  printf("Распечатка массива \n");
  for (i=0; i<Nx; i++)  //заметьте еще раз, проверяется условие i<N
    printf("%d ",(*(x+i)));

   for (i=0;i<Ny;i++)  {        /* i - is a namber of row       */
      *(y+i) = -50+random(range);
                       }

  // Вывод одномерного массива
  printf("\n Распечатка массива \n");
  for (i=0; i<Ny; i++)  //заметьте еще раз, проверяется условие i<N
    printf("%d ",(*(y+i)));

   for (i=0;i<Nres;i++)  {        /* i - is a namber of row       */
      *(pol+i) = 1000;
      *(otr+i) = -1000;
                         }
// раскидываем массив х
int jpol=0, jotr=0;
for (i=0;i<Nx;i++)  {        /* i - is a namber of row       */
      if (*(x+i)>0) {*(pol+jpol)=*(x+i);jpol++;}
      if (*(x+i)<0) {*(otr+jotr)=*(x+i);jotr++;}
                    }

// раскидываем массив y

for (i=0;i<Ny;i++)  {        /* i - is a namber of row       */
      if (*(y+i)>0) {*(pol+jpol)=*(y+i);jpol++;}
      if (*(y+i)<0) {*(otr+jotr)=*(y+i);jotr++;}
                    }

 // Создаем доп массив для сортировки (по заданию)

  for (i=0; i<jpol; i++)  //
   *(pol2+i+1)=*(pol+i);

//сортировка массива pol
if (jpol>=1) {
    for (int j=0; j<jpol-1;j++)
{

    for (int i=0; i<jpol-1;i++)
    {
        if (*(pol+i)>*(pol+i+1))
       {
           int temp = *(pol+i);
           *(pol+i) = *(pol+i+1);
           *(pol+i+1)=temp;
       }
    }
}
           }

//сортировка массива otr
if (jotr>=1) {
  int m,min;
/* Сортировка методом прямого поиска */
  for (i=0;i<jotr-1;i++) /* в переменной i - индекс первого элемента
   массива, то есть массив от d[i] до d[N] */
    {  /* Найти минимум в массиве от i-того до N-ного */
      m=i; min=(*otr+i); /* m-индекс минимума, min-значение минимума */
      for (j=i+1;j<jotr; j++) /* Поиск в оставшейся части массива */
 {
    if (*(otr+j)<min)  /* Найдено новое значение минимума? */
      { min=*(otr+j); m=j; } /* Запомнить минимум и его индекс */
 }
      /* Обменять первый (i-ый) и минимум (m-ый) местами */
      *(otr+m)=*(otr+i); *(otr+i)=min;
    }
}

//сортировка массива pol2
if (jpol>=1) {
           int m=0;
/* Сортировка методом прямого включения */
  for (i=2; i<=jpol; i++) /* в переменной i - индекс включаемого элемента */
    {       /* включение i-того элемента */
      m=i; // Начальное значение индекса цикла включения
      *pol2=*(pol2+i); // Установка барьера
      while (*(pol2+m)<*(pol2+m-1)) // включение
  { //  Обмен с предыдущим элементом местами
      int tmp = *(pol2+m); *(pol2+m) = *(pol2+m-1); *(pol2+m-1)= tmp;
      m--; // включение идет к началу массива
 };
    }; }

  // Вывод одномерного массива
  printf("\n Распечатка массива otr \n");
  for (i=0; i<jotr; i++)  //
    printf("%d ",(*(otr+i)));
    printf("\n Распечатка массива pol \n");
  for (i=0; i<jpol; i++)  //
    printf("%d ",(*(pol+i)));
  printf("\n Распечатка массива pol2 \n");
  for (i=1; i<=jpol; i++)  //
    printf("%d ",(*(pol2+i)));

 return 0;
}

Листинг 2 обработка массивов через функции здесь.

Функции в С++

С++Функции в С++

Коды или команды в программе часто объединяются в так  называемые функции. Например, группа команд, необходимых для чтения исходных данных, объединена в функцию readData().  Также  для выполнения оставшихся подзадач обозначим функции sortData(), compactData() и ShowData().

Функция main()

В каждой С++ программе должна быть ровно одна функция с именем main(). Исполнение программы начинается с выполнения первой команды в функции main(), Затем последовательно одна за другой выполняются все дальнейшие команды, и, выполнив последнюю команду функции main(), программа завершает работу.

Любая функция состоит из четырех частей:

  • Тип возвращаемого значения,
  • Имени самой функции,
  • Списка параметров функции (может быть пустой)
  • Сам код функции.

Первые три части составляют прототип функции.

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

Пример общего вида функции

void readData() { cout << "Считываем \n"; }

В нашем примере ниже  тело функции main() содержит вызовы функций readData(), sortData(), compactData() и showData(). Последней выполняется инструкция return 0.

Инструкция return

Инструкция return обеспечивает механизм завершения работы функции. Если оператор return сопровождается некоторым значением (в данном примере 0), это значение становится возвращаемым значением функции. Возвращаемое значение 0 говорит об успешном выполнении функции. (В стандарте С++ функция main() возвращает 0 по умолчанию, если оператор return не указан явно.)

Определим наши функции readData(), sortData(), compactData() и showData():

void readData() { cout << "Считываем \n"; }
void sortData() { cout << "Сортируем\n"; }
void compactData() { cout << "Упаковываем\n"; }
void showData() { cout << "Выводим результат\n"; }

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

Листинг примера использования функций

#include<iostream>

void readData() { cout << "Считываем\n"; }
void sortData() { cout << "Сортируем\n"; }
void compactData() { cout << "Упаковываем\n"; }
void showData() { cout << "Выводим резульатат\n"; }
int main()
{
//выводим последовательно функции 
  readData();
  sortData();
  compactData();
  showData();

  return 0; //программа завершилась корректно
}

Работающий пример функций показан тут

Распространенные математические функции в С++

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

Чтобы использовать математические функции необходимо подключить библиотеку math.h

#include "math.h"

Для каждой функции нужно обращать внимание на тип обрабатываемых данных, например, результатом функции abs(–3.7) будет число 3.0, а не 3.7 как ожидалось, т.к. функция abs может работать только с целыми числами.

Перечень математических функций для изучения (в тригонометрических функциях углы измеряются в радианах):

abs (fabs) – абсолютная величина целого числа (числа с плавающей точкой),
acos – вычисление арккосинуса,
asin – вычисление арксинуса,
atan – вычисление арктангенса,
atan2 – вычисление арктангенса (вычисляет угол по значению катетов),
atof – преобразует строку в число с плавающей точкой
atoi – преобразует строку в целое число
atof – преобразует строку в число с плавающей точкой
cabs – вычисляет абсолютную величину комплексного числа,
ceil – округление до ближайшего целого в большую сторону,
cos – косинус,
cosh – гиперболический косинус,
exp – экспонента,
floor – округление до ближайшего целого в меньшую сторону,
fmod – остаток целочисленного деления двух чисел,
frexp – вычисляет значение мантиссы m и показателя степени n для преобразо-
вания числа с плавающей точкой к виду m⋅2n ,
hypot – вычисляет значение гипотенузы по значениям катетов,
ldexp – по значению мантиссы m и показателя степени n вычисляет число с плавающей точкой по формуле m⋅2n
log – вычисляет натуральный логарифм числа,
log10 – вычисляет десятичный логарифм числа,
modf – разбивает число с плавающей точкой на целую и дробную части,
poly – вычисляет полином вида a0x0 + a1x1 +…anxn
pow – вычисляет возведение числа в степень,
pow10 – вычисление числа 10 в степень,
sin – вычисление синуса угла,
sinh – вычисление гиперболического синуса,
sqrt – вычисление квадратного корня,
tan – вычисление тангенса угла,
tanh — вычисление гиперболического тангенса угла.

Логические операторы в С++

С++Логические операторы в С++

В языке Си результатом логической операции служит целое число,
любое целое число, не равное 0, интерпретируется как истина;

 

Пример

int a=1;
if (a-1) a++;

Логические операторы

&& — логическое И
|| — логическое ИЛИ
! — отрицание
Пример

if (a>0)&&(a<10) a++;
if (!(a>0)) a++;
if (a>0)||(a<10) a++;

Поразрядные (битовые) логические операторы:

& ( или and ),
| ( или OR ),
^ ( или XOR ),
— ( или NOT ),
<< сдвиг влево,
>> сдвиг вправо.
Пример

Пусть a=a & 127;
    Тогда,
если a=65, т.е.   11000001
и число 127 есть  01111111
В итоге будет     01000001

Если соответствующие разряды одинаковы, то в результате имеем 1, иначе имеем 0. Так работает операция «and» или логическое умножение.

Аналогично работают другие битовые логические операторы.