Работа с указателями на языке Си
Подсчет количества отрицательных элементов массива. Изменение исходного массива перемещением всех его положительных элементов в начало с исходным порядком их следования. Вывод на дисплей количества перемещенных элементов. Алгоритм и код программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 23.11.2014 |
Размер файла | 946,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лабораторная работа по дисциплине "Вычислительная техника и программирование"
Работа с указателями в языке С
Задание №1
Подсчитать количество отрицательных элементов массива. Вывести на дисплей полученное значение. После этого изменить исходный массив следующим образом: переместить все положительные элементы массива в начало, не изменяя порядка их следования в исходном массиве. Порядок следования неперемещаемых элементов не изменять. Вывести на дисплей количество перемещенных элементов.
1. Алгоритм программы
Рис. 1
массив дисплей программа код
Рис. 2
2. Тестовые наборы
№ теста |
Ввод элементов массива |
Ожидаемый результат |
|||
Отрицательных элементов |
Сортированный массив |
Количество перемещенных элементов |
|||
1 |
-1 -2 -3 -4 -5 -6 -7 -8 -9 1 |
9 |
1 -1 -2 -3 -4 -5 -6 -7 -8 -9 |
1 |
|
2 |
-1 -2 3 4 5 6 -7 -8 9 1 |
4 |
3 4 5 6 9 1 -1 -2 -7 -8 |
6 |
|
3 |
-1 -2 3 -4 -5 6 -7 -8 9 1 |
6 |
3 6 9 1 -1 -2 -4 -5 -7 -8 |
4 |
|
4 |
-1 2 3 4 5 6 7 8 9 -1 |
2 |
2 3 4 5 6 7 8 9 -1 -1 |
8 |
3. Код программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
#include <time.h>
int main ()
{
setlocale(LC_CTYPE, "rus");
int const max_size = 100;
int mas[max_size], *p, *p1;
int mas2[max_size], *h;
int size;
p = p1 = &mas[max_size];
h = &mas2[max_size];
printf("Введите размер массива: ");
while(scanf("%i", &size) != 1 || size == 0 || size > 100)
{
rintf("Ошибка! Введите корректные данные: ");
fflush stdin;
}
int menu;
printf("Меню\n1 - Для ручного ввода массива\n2 - Для рандомного ввода массива\nПоле ввода: ");
while(scanf("%i", &menu) != 1 || menu >= 3 || menu <= 0)
{
printf("Ошибка! Введите корректные данные: ");
fflush stdin;
}
switch(menu)
{
case 1: printf("Введите элементы массива: ");
for((p = &mas[0]) && (h = &mas2[0]); (p < &mas[size]) && (h < &mas2[size]); (p++) && (h++))
{
scanf("%i", p);
*h = *p;
}
break;
case 2: srand(time (NULL));
int a, b;
printf("Ввод начала диапазона: ");
while(scanf("%i", &a) != 1 || a == 0)
{
printf("Ошибка! Введите корректные данные: ");
fflush stdin;
}
printf("Ввод конца диапазона: ");
while(scanf("%i", &b) != 1 || b == 0)
{
printf("Ошибка! Введите корректные данные: ");
fflush stdin;
}
for ((p = &mas[0]) && (h = &mas2[0]); (p < &mas[size]) && (h < &mas2[size]); (p++) && (h++))
{
*p = rand()%(b - a + 1) + a;
*h = *p;
}
printf("Элементы массива: ");
for(p = &mas[0]; p < &mas[size]; p++)
printf("%i ", *p);
printf("\n");
break;
}
int sum = 0;
for(p = &mas[0]; p < &mas[size]; p++)
{
if(*p < 0)
{
sum++;
}
}
printf("Количество отрицательных элементов: %i\n", sum);
if (sum == 0)
{
printf("Отрицательных элементов нет, сортировка не требуется.\n");
system("pause");
return 0;
}
printf("\n");
printf("Сортированый массив");
int kol = 0, kol2 = 0;
int k;
for (p = &mas[0]; p < &mas[size]; p++)
for(p1 = &mas[0]; p1 < &mas[size-1]; p1++)
if (*p1 <= 0 & *(p1+1) > 0)
{
k = *p1;
*p1 = *(p1+1);
*(p1+1) = k;
}
for (p = &mas[0]; p < &mas[size]; p++)
if(*p > 0)
kol++;
for ((p = &mas[0]) && (h = &mas2[0]); (*p < (kol+1)) && (*h < (kol+1)); (p++) && (h++))
if(*h == *p)
kol2++;
kol = kol - kol2;
printf("\nКоличество перемещенных элементов: %i", kol);
printf("\n");
printf("Элементы массива: ");
for(p = &mas[0]; p < &mas[size]; p++)
printf("%i ", *p);
printf("\n");
system("pause");
return 0;
}
4. Результат работы программы
Таблица 2
№ теста |
Ввод элементов массива |
Ожидаемый результат |
Вывод |
|||
Отрицательных элементов |
Сортированный массив |
Перемещенных элементов |
||||
1 |
-1 -2 -3 -4 -5 -6 -7 -8 -9 1 |
9 |
1 -1 -2 -3 -4 -5 -6 -7 -8 -9 |
1 |
Тест пройден |
|
2 |
-1 -2 3 4 5 6 -7 -8 9 1 |
4 |
3 4 5 6 9 1 -1 -2 -7 -8 |
6 |
Тест пройден |
|
3 |
-1 -2 3 -4 -5 6 -7 -8 9 1 |
6 |
3 6 9 1 -1 -2 -4 -5 -7 -8 |
4 |
Тест пройден |
|
4 |
-1 2 3 4 5 6 7 8 9 -1 |
2 |
2 3 4 5 6 7 8 9 -1 -1 |
8 |
Тест пройден |
Рис. 3
5. Вывод о работоспособности программы
Программа прошла тестирование: в результате выполнения тестов программа выдала ожидаемые результаты. Программа - работоспособна.
Размещено на Allbest.ru
Подобные документы
Выведение значения элементов массива, которые удовлетворяют неравенству. Подсчет количества отрицательных элементов массива. Изменение исходного массива. Тестирование программы. Проверка её работоспособности. Реакция программы на сообщение об ошибке.
лабораторная работа [1,3 M], добавлен 23.11.2014Алгоритм и код программы для создания исходного двоичного файла чисел с произвольным количеством элементов, чтения из файла действительных восьмибайтных элементов и подсчёта общего количества элементов файла. Вывод результата работы программы на экран.
контрольная работа [1,0 M], добавлен 23.11.2014Вычисление суммы положительных элементов массива. Упорядочивание элементов массива по убыванию. Решение задачи с помощью алгоритма, реализованного в среде Microsoft Visual 2008 Express. Реализация и тестирование программы. Выполнение трассировки функций.
практическая работа [146,3 K], добавлен 23.01.2015Описание алгоритма решения задачи графическим способом. Ввод элементов исходного массива в цикле. Нахождение определённых элементов. Сортировка элементов с помощью пузырькового метода. Разработка программы на языке Pascal. Поиск наибольшего элемента.
лабораторная работа [123,5 K], добавлен 15.01.2014Разработка и реализация типовых алгоритмов обработки одномерных массивов на языке Delphi. Максимальный и минимальный элемент массива. Значение и расположение элементов массива. Элементы массива, находящиеся перед максимальным или минимальным элементом.
лабораторная работа [12,8 K], добавлен 02.12.2014Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.
курсовая работа [115,5 K], добавлен 22.05.2010Запись в массив листа Excel c именем "Эксперимент". Среднее арифметическое значение элементов массива. Вывод диалогового окна. Фрагмент программы, организующий считывание исходного массива в программу для обработки. Адрес ячейки электронной таблицы.
контрольная работа [1,1 M], добавлен 16.08.2011Разработка программы для работы с последовательностью прописных латинских букв. Алгоритм программы, результаты ее работы и вывод о работоспособности. Поиск количества вхождений элементов одной строки в другую. Тестирование программы, ее результаты.
лабораторная работа [858,0 K], добавлен 23.11.2014Формирование одномерного массива, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца. Определение столбца, в котором равное количество положительных и отрицательных элементов. Написание программы и ее тестирование.
контрольная работа [97,2 K], добавлен 21.06.2009Одномерные числовые массивы, образование элементами целочисленного массива невозрастающей последовательности. Программное нахождение суммы элементов каждой возможной строки матрицы и формирование массива из найденных сумм, вывод массива-результата.
лабораторная работа [12,8 K], добавлен 09.01.2011