Волжский политехнический институт (филиал) федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Волгоградский государственный технический университет»
(ВПИ (филиал) ВолгГТУ)
|
|
Кафедра «___________________________________________________»
ЛАБОРАТОРНАЯ РАБОТА №2
|
по дисциплине«____________________________________________»
|
на тему____________________________________________________
______________________________________________________________
|
Студент______________________________________________________
(имя, отчество, фамилия)
|
Группа________________________
Оценка ________________________
|
Проверил ________________________ _____________________
(подпись и дата подписания) (долж., инициалы и фамилия)
Волжский, 2013 г.
Лабораторная работа №2
Одномерные и двумерные массивы в языке Cи.
Цель: Изучить алгоритмы работы с одномерными и двумерными массивами и способы их реализации на языке Си.
Задача:
В одномерном массиве, состоящем из n вещественных элементов:
¨ Распечатать индексы максимальных элементов массива;
¨ Произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
¨ Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине – элементы, стоявшие в четных позициях.
В программе использованы следующие переменные: float a[100], b[100]; int i, j, n, m, k;
n- переменная для хранения количества элементов в массиве;
m - переменная, для хранения максимального элемента массива;
k - переменная, для хранения произведения элементов массива, расположенных между первым и вторым нулевыми элементами;
i – переменная – счетчик, хранит текущий индекс элемента массива;
j - флаг, для проверки есть ли вообще нулевой элемент;
a[100] – одномерный массив;
b[100] – одномерный массив.
Блок схема
Листинг программы
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include <complex>
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]) {
float a[100], b[100];
int i, j, n, m = -99999, k = 1;
//ввод границы массива
printf("Vvedite granicy massiva: ");
scanf("%i", &n);
//ввод элементов в массив
for (i = 1; i <= n; i++)
{
printf("a[%i]=", i);
cin>>a[i];
}
// номера максимального элемента массива
for (i = 1; i <= n; i++)
if (a[i] > m) m = a[i];
//вывод индексов максимальных элементов массива
for (i = 1; i <= n; i++)
if (a[i] == m)
cout<<"\nNomer massiva v kotorom naibolshii element: "<<i;
// произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
//Нахождение первого 0
m=0;
j=0;
for (i = 1; i <= n; i++)
if (a[i] == 0) { j=j+1;
i = i + 1;
//Нахождение второго 0
for (i; i <= n; i++)
if (a[i] == 0) { j=j+1;
break; }
else
//перемножение между 0
{ m=m+1;
k = k * a[i]; }
}
//проверки на 0
if (k==1 && m==0) cout<<"\n\nNetu nolei\n";
else
if (j<2) cout<<"\n\nTolko 1 nol\n";
else cout << "\n\nProizvedenie massivov mejdy 0: " << k << "\n";
//Преобразовать массив таким образом, чтобы в первой его
//половине располагались элементы, стоявшие в нечетных позициях, а во
//второй половине – элементы, стоявшие в четных позициях.
j=1;
//нахождение не четных и запись в новый массив
for (i = 1; i <= n; i++)
if (i % 2!= 0) {
b[j] = a[i];
j = j + 1;
}
//нахождение четных и запись в тот же новый массив
for (i = 1; i <= n; i++)
if (i % 2 == 0) {
b[j] = a[i];
j = j + 1;
}
//вывод массива
cout<<"\nPreobrazovannii massiv\n\n";
for (int i = 1; i <= n; i++)
cout << setw(3) << b[i];
getch();
return 0;
}
//---------------------------------------------------------------------------
Результаты тестового прогона программы
Постановка задачи:
Дана матрица А(n,m). Переписать элементы матрицы А, значения которых больше заданного числа С в одномерный массив B.
Const n= 5;
m= 4;
Var A: array[1..n,1..m] of integer;
B: array[1..n*m] of integer;
I, j, k, c:integer;
begin
writeln (’Введите элементы матрицы А’);
for i:=1 to n do
for j:=1 to m do
read (A[i,j]);
writeln (’Введите с’);
readln (c);
k:= 0;
for i:= 1 to n do
for j:= 1 to m do
if A[i,j]>c
then begin
k:= k+1;
B[k]:= A[i,j]
end;
if k = 0
then writeln (’В матрице А нет элементов, больших с’)
else begin
writeln(’Вывод массива B’);
for i:= 1 to k do
write (B[i], ’ ’)
end
end.
Скриншот работы программы
….
Постановка задачи:
Дана матрица А(6,3). Отпечатать номер каждой строки матрицы А, в которой второй элемент меньше среднего арифметического элементов этой строки, и число таких строк.
const n= 6;
m= 3;
Var A: array[1..n,1..m] of real;
I, j, k: integer;
s, sr: real;
begin
writeln (’Введите элементы матрицы А’);
for i:= 1 to n do
for j:= 1 to m do
read (A[i,j]);
k:= 0;
for i:= 1 to n do
begin
s:= 0;
for j:= 1 to m do
s:= s + A[i,j];
sr:= s/m;
if A[i,2]<sr
then begin
k:= k+1;
writeln (’Номер строки = ’, i)
end
end;
writeln (’Число строк =’, k)
end.
Скриншот работы программы
…