отчет 1 семестр практика 5 11 вариант
.docxБалтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова
Кафедра И5 «Информационные системы и программная инженерия»
Практическая работа №5 по дисциплине «Информатика: Основы программирования» на тему «Массивы»
Вариант №11
Выполнил: Студент Ситева Софья Борисовна Группа О401Б Преподаватель: Лазарева Татьяна Ильинична
Санкт-Петербург 2020 г.
Задача 1
Условие задачи:
Дан массив A из n элементов (n<=45). Заменить все четные элементы
массива А на их квадраты, а нечетные удвоить.
Исходные данные:
Количество элементов в массиве A, обозначим n, тип int.
Массив из n элементов натуральных чисел, обозначим массив A, тип int.
Результирующие данные:
Измененный массив A.
Дополнительные переменные:
В третьем способе - обращение к элементам массива в форме с указателем переменной p. Указатель, обозначим p, тип int*.
Структурная схема программы:
Текст программы (обращение к элементам массива в форме индексного выражения):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
int A[45];
scanf_s("%d", &n);
for (i = 0; i < n; i++)
scanf_s("%d", &(A[i]));
printf("initial\n");
for (i = 0; i < n; i++)
{
printf("%d\t", A[i]);
if (A[i] % 2 == 0)
A[i] *= A[i];
else
A[i] *= 2;
}
printf("\nresult\n");
for (i = 0; i < n; i++)
{
printf("%d\t", A[i]);
}
return 0;
}
Текст программы (обращение к элементам массива в форме с указателем константой):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
int A[45];
scanf_s("%d", &n);
for (i = 0; i < n; i++)
scanf_s("%d", &(*(A + i)));
printf("initial\n");
for (i = 0; i < n; i++)
{
printf("%d\t", *(A + i));
if (*(A + i) % 2 == 0)
*(A + i) *= *(A + i);
else
*(A + i) *= 2;
}
printf("\nresult\n");
for (i = 0; i < n; i++)
{
printf("%d\t", *(A + i));
}
return 0;
}
Текст программы (обращение к элементам массива в форме с указателем переменной p):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
int A[45];
int* p;
scanf_s("%d", &n);
for (p = &A[0]; p < &A[n]; p++)
scanf_s("%d", p);
printf("initial\n");
for (p = &A[0]; p < &A[n]; p++)
{
printf("%d\t", *p);
if (*p % 2 == 0)
*p *= *p;
else
*p *= 2;
}
printf("\nresult\n");
for (p = &A[0]; p < &A[n]; p++)
{
printf("%d\t", *p);
}
return 0;
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
n = 6 1 2 3 4 5 6 |
initial 1 2 3 4 5 6 result 2 4 6 16 10 36 |
initial 1 2 3 4 5 6 result 2 4 6 16 10 36 |
n = 3 5 7 7 |
1initial 5 7 7 result 10 14 14 |
initial 5 7 7 result 10 14 14 |
n = 1 11 |
initial 11 result 22 |
initial 11 result 22 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 2
Условие задачи:
Дан массив Q из n элементов (n<=45). Найти максимальный элемент
среди элементов с номерами n1 и n2, которые вводятся с клавиатуры.
Исходные данные:
Количество элементов в массиве, обозначим n, тип int.
Результирующие данные:
Максимальный элемент в массиве, обозначим max, тип int.
Дополнительные переменные:
Указатель на массив, обозначим p, тип int*.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int main()
{
int i, n, n1, n2, max;
int* p;
scanf_s("%d", &n);
scanf_s("%d", &n1);
scanf_s("%d", &n2);
p = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
scanf_s("%d", &p[i]);
printf("initial\n");
for (i = 0; i < n; i++)
printf("%d\t", p[i]);
max = p[n1];
for (i = n1-1; i < n2; i++)
{
if (p[i] > max)
max = p[i];
}
printf("max = %d\n", max);
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
4 1 4 1 2 3 4 |
initial 1 2 3 4 max = 4 |
initial 1 2 3 4 max = 4 |
4 2 3 1 2 3 4 |
initial 1 2 3 4 max = 3 |
initial 1 2 3 4 max = 3 |
6 1 2 3 1 2 66 5 5 |
initial 3 1 2 66 5 5 max = 3 |
initial 3 1 2 66 5 5 max = 3 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.