Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Else

Do

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

В качестве примера рассмотрим следующую задачу:

Дана последовательность целых ненулевых чисел. Индикатор окончания – число ноль. Определить сумму элементов и количество отрицательных чисел в последовательности.

Для решения задачи используем накопитель и счетчик для получения суммы элементов и количества отрицательных чисел.

// Обработка последовательности - 1

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include <math.h>

void main()

{

int a; float sum=0; int ko=0; int f=0;

cout<<"\nInput posledovatelnost (0)\n";

cin>>a;

while (a!=0)

{ sum+=a;

if (a<0) ko++;

f=1;

cin>>a;

}

if (f==1)

printf("Sum = %.3f, Kol.otr. = %i.\n",sum,ko);

else printf("Posledovatelnost is empty!\n");

getch();

}

Отметим, что при использовании оператора while оператор ввода cin>>a приходится использовать 2 раза, первый – вне цикла для обработки пустой последовательности и второй – внутри цикла для ввода очередных элементов.

Для анализа ситуации, когда обрабатывается пустая последовательность, используется механизм фиксации события (флажок int f=0).

А теперь рассмотрим вторую форму организации цикла с использованием оператора do...while.

// Обработка последовательности - 2

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include <math.h>

void main()

{

int a; float sum=0; int ko=0; int f=0;

cout<<"\nВведите последовательность. (0)\n";

{cin>>a;

if (a!=0)

{ sum+=a;

if (a<0) ko++;

f=1;

}

}

while (a!=0);

if(f==1)

printf("Sum=%.3f,Kol.otr.=%i.\n",sum,ko);

printf("Последовательность пуста!\n");

getch();

}

В этом случае, чтобы исключить обработку индикатора окончания, необходимо дважды анализировать условие: if(a<0)и while(a!=0).

Еще один вариант программы связан с использованием оператора досрочного выхода из цикла - break. Другие способы определения окончания последовательности также должны быть реализованы с учетом того, что обрабатываться могут лишь элементы последовательности, а не служебные или иные виды данных.

 

4.2 Сложные структуры данных – массивы

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

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

Например, объявим массив данных:

int mas[4];

Т.е. объявлен массив элементов целого типа, состоящий из 4-х элементов. Размер массива в этом случае составляет 4 х 2 = 8 байт.

Индекс массива начинается с 0.

Как и обычные переменные, элементы массива могут быть инициализированы при объявлении:

int mas[4]={12, -7, 19, 5};

int mas[4]={6, 3};

Остальные элементы будут равны 0.

Индексы можно вычислять:

tmp = mas[i+1]; Если i=2 тогда tmp=8.

Например, следующий фрагмент выводит значения массива на экран:

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

cout<<mas[i]<<" ";

А вот этот фрагмент позволяет вводить данные в массив в диалоговом режиме:

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

{cout<<i<<" = "; cin>>mas[i];

cout<<"\n";

Массив не может быть пустым. В C++ можно использовать одно, двух, трех и более мерные массивы. Например, двухмерный массив 2 х 3 объявляется следующим образом:

int msb[2][3]={{12,3,-5},{19,5,4}};

 

 

Массив msb располагается в памяти он так:

 

i, j    
0, 0   msb[0][0]
0, 1   msb[0][1]
0, 2 -5 msb[0][2]
1, 0   msb[1][0]
1, 1   msb[1][1]
1, 2   msb[1][2]
   

 

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

Чтобы вывести построчно двухмерный массив, можно использовать следующий программный фрагмент:

for (int i=0; i<2; i++)

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

cout<<msb[i][j]<<" = ";

cout<<"\n";

}

 

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

// Task 51 Количество совершенных чисел

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#include <math.h>

int mas[12]={12,7,6,67,34,28,32,17,18,9};

int sover (int a); // -- prototype

void main() // --- MAIN ---

{ int i,j;

int k=0;

for (i=0;i<9;i++) // Обработка массива

{if(sover(mas[i])==1)

{k++; printf("%4i\n",mas[i]);};

};

printf("k=%2i.\n",k);

getch();

}

int sover (int a) // 1 – если число a совершенное.

{ int Sum=0;

for(int i=1;i<=a-1;i++)

{if (a%i==0) Sum+=i;};

if (Sum==a) return 1;

return 0;

}




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 435; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.