Смекни!
smekni.com

Одномерные массивы (стр. 5 из 6)

При обработке массива X необходимо проверять только элементы, стоящие на четных местах, т.е. параметр цикла i изменяется от in=1 до ik=nс шагом 2. Условие отбора элементов из первого массива X[i]>0. При обработке массива Y учитываются все его элементы, т.е. параметр цикла i изменяется от in=0 до ik=mс шагом 1. Условие отбора элементов из второго массива – Y[i]> X[0].

Описанный алгоритм формирования нового массива и программа представлены на рисунке 2.20.


Используемые переменные:x[] – статический (исходный) массив;n – число элементов массива X;y[] – статический (исходный) массив;m – число элементов массива;z[] – динамический (формируемый) массив k – счетчик элементов нового массива Z;i – параметр цикла;
#include <stdio.h>main(){ int k, n, m, i, x[10], y[10]; puts("Введите число элементов массива X:");scanf("%d",&n); for(i=0;i<n;i++) { printf("x[%2d]=",i); scanf("%d",&x[i]);}puts("Введите число элементов массива Y:");scanf("%d",&m); for(i=0;i<m;i++) { printf("y[%2d]=",i); scanf("%d",&y[i]);}int *z=newint[15]; // выделение памяти под массив Zk=0; for(i=1;i<n;i+=2) { if(x[i]>0) { z[k]=x[i]; k++; } } for(i=0;i<m;i++) { if(y[i]>x[0]) { z[k]=y[i]; k++; } } puts("Массив X:"); for(i=0;i<n;i++) printf("x[%d]=%d&bsol;n",i,x[i]); puts("Массив Y:"); for(i=0;i<m;i++) printf("y[%d]=%d&bsol;n",i,y[i]); if(k==0)puts("Массив Z не сформиро-ван.");else { puts("Массив Z:"); for(i=0;i<k;i++) printf("z[%d]=%d&bsol;n",i,z[i]); } delete[] z; // освобождение памяти}

Рисунок 2.20. Графический алгоритм и программа для примера 2.8

Литература

1. М&bsol;ук №3089. Кравченко О.А., Мартыненко А.М. Программирование ввода–вывода данных и линейных вычислительных алгоритмов на языке С: практ. пособие к выполнению лаб. и контрол. работ по дисциплине "Вычислительная техника и программирование" для студентов техн. специальностей днев. и заоч. форм обучения Гомель: ГГТУ им. П.О. Сухого, 2005. – 33 с.

2. М&bsol;ук №3106. Кравченко О.А., Коробейникова Е.В. Программирование разветвляющихся и циклических алгоритмов на языке С: пособие по выполнению лабораторных и контрольных работ по дисциплине"Вычислительная техника и программирование" для студентов техн. специальностей днев. и заоч. форм обучения Гомель: ГГТУ им. П.О. Сухого, 2005. – 33 с

3. Информатика. Базовый курс : учеб. пособие / под ред. С. В. Симоновича. - 2-е изд. - Санкт-Петербург : Питер, 2007. - 639с. : ил. - (Учебник для вузов). - Библиогр.: с.631-632. - ISBN 5-94723-752-0

4. С/С ++. Программирование на языке высокого уровня / Т. А. Павловская. - Санкт-Петербург : Питер, 2006. - 460с. : ил. - (Учебник для вузов). - Библиогр.:с.383. - ISBN 5-94723-568-4.

5. С#. Программирование на языке высокого уровня / Т. А. Павловская. - Сант-Петербург : Питер, 2007. - 432с. : ил. - (Учебник для вузов). - Библиогр.: с.425-426. - ISBN 5-91180-174-4.

6. Информатика : учеб. для вузов / В. А. Острейковский. - Москва : Высш. шк., 2000. - 511с. : ил. - Библиогр.: с.508. - ISBN 5-06-003533-6.

7. Информатика: Учебник /Под ред. Проф. Н.В.Макаровой. –М.: Финансы и статистика, 1998.

8. Касаткин А.И., Вальвачев А.Н. Профессиональное программирование на языке СИ: от Turbo C к Borland C++: Справ.пособие. – Мн.: Выш.шк., 1992. – 240 с.

9. Топп У., Форд У. Структуры данных в С++: Пер. с англ.–М.: БИНОМ, 1994. – 816 с.

10. Крячков А.В., Сухина И.В., Томшин В.К. Программирование на С и С++. Практикум: Учебн. Пособие для вузов. – М.: Горячая лининия – Телеком, 2000 – 344 с.

11. Страуструп Б. Язык программирования Си++: Пер. с англ.– М.: Радио и связь, 1991. – 352 с.


Приложение

Примеры решения задач по обработке одномерных массивов

Задача 1.

Вычисление сумм, количеств и произведений элементов массива

Предполагается, что задан массив чисел. Программа должна:

1) вводить размерность и элементы массива;

2) вводить некоторые дополнительные числа;

3) выполнять действия в соответствии с условием задачи;

4) выводить исходные данные и результаты вычислений.

Исходные данные для отладки программы выбрать самостоятельно. Массив объявить как статический.

Задание:

В одномерном массиве A размерностью n, найти количество чисел, меньших заданного X, и произведение отрицательных чисел, стоящих на четных местах.

Решение

Таблица соответствия переменных

Переменные в задаче Имя на языке Си Тип Комментарий
A[] A[] float Одномерный статический массив
n n int Количество элементов массива
P P float Произведение отрицательных чисел
X x float Заданное число
k k int Количество чисел меньших X
k1 int Количество отрицательных чисел
i int Номер элемента массива; параметр цикла

Графическая схема алгоритма

Описание алгоритма

1. блоки 1 – 2 вводятся исходные данные;

2. блоки 3 – 9 вычисление и вывод количества K меньших заданного X;

3. блоки 10 – 18 вычисление количества K1 и произведения P отрицательных элементов массива стоящих на четных местах;

4. блоки 18 – 20 проверка на наличие в массиве отрицательных чисел на четных местах и в случаи выполнения проверки вывод их произведения P.


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

#include <stdio.h>

#include <math.h>

main ()

{

float P, A[10], x; //Описание переменных

int i, k1, k, n;

puts (“ Введите число x”);

scanf (“%f”, &x); // Ввод x

puts (“ Введите число элементов массива А”);

scanf (“%d”, &n);

for (i=0; i<n; i++) // Вводмассива

{

printf(“Введитечисло A[%d]=”, i);

scanf(“%f”, &A[i]);

}

puts(“Массив А”); // Вывод массива

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

printf(“%.2f “, A[i]);

printf(“&bsol;n”);

printf(“ x=%.3f &bsol;n”, x); // Вывод x

k=0;

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

if (A[i]<x) k=k+1; // Определение кол-ва чисел <x

printf(“ k=%d&bsol;n” ,k);

P=1;

k1=0;

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

if (A[i]<0)

{ // Вычисление произведения

P=P*A[i]; // отрицательных чисел

k1=k1+1; // стоящих на четных местах

}

if (k1==0)

printf(“В массиве на чётных местах нет отрицательных чисел &bsol;n”);

else

printf(“ P=%6.2f &bsol;n” ,P);

}

Тесты

1)

Массив А

3.00 6.00 10.00 -7.00 -3.00 -7.00 -5.00 17.00 6.00 10.00

x=10.000

k=7

P= 49.00

2)

Массив А

2.00 9.00 4.00 6.00 7.00 8.00

x=0.000

k=0

В массиве на чётных местах нет отрицательных чисел


Задача2.

Вычисление сумм, количеств и произведений элементов массива

Предполагается, что задан массив чисел. Программа должна:

1) вводить размерность и элементы массива;

2) вводить некоторые дополнительные числа;

3) выполнять действия в соответствии с условием задачи;

4) выводить исходные данные и результаты вычислений.

Исходные данные для отладки программы выбрать самостоятельно. Массив объявить как динамический.

Задание:

В одномерном массиве A размерностью n, найти максимальный элемент, расположенный между первым и последним нулевыми элементами массива.

Решение

Таблица соответствия переменных

Переменные в задаче Имя на языке Си Тип Комментарий
max max int Максимальное число
A[] A[] int Одномерный динамический массив
n n int Количество элементов
t1 int Индекс первого нулевого элемента
t2 int Индекс последнего нулевого элемента
i int Номер элемента массива; параметр цикла

Описание алгоритма

1. блоки 1 – 2 ввод/вывод исходного массива A[];

2. блоки 3 – 5 поиск первого нулевого элемента в массиве;

3. блоки 6 – 7 проверка на наличие в массиве хотя бы одного нулевого элемента и в случаи их отсутствия вывод сообщения «В массиве нет нулей» и переход на конец алгоритма;

4. блоки 8 – 12 поиск последнего нулевого элемента в массиве и сохранение позиции первого нуля в t1, а последнего в t2;

5. блоки 13 – 14 проверка расположения нулевых элементов в массиве и в случаи ошибки вывод сообщения «В массиве только один ноль или они располагаются друг за другом» » и переход на конец алгоритма;

6. блоки 15 – 21 в случаи выполнения проверки (блок 13) поиск максимального элемента между крайними нулевыми элементами и вывод полученного результата.


Графическая схема алгоритма


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

#include <stdio.h>