Итак формулировка задачи такова «найти все четные элементы массива, вывести на экран, и подсчитать их количество».
Для начала определим, что такое четное число вообще? правильно, четными числами называются числа, которые делятся на 2 без остатка (иногда еще говорят кратны 2).
Теперь определимся как это реализовать. В паскале есть такой замечательный оператор mod, который нам как раз и необходим. Сей оператор отвечает за деление с остатком, а если быть точнее, применив данный оператор, вы получаете остаток от деления. Например 11 разделить на 2. Использовав mod мы получим в ответе число 1.
11/2 = 5 (остаток 1)
Теперь как это все записать в паскале. Пусть переменная х — это остаток
x := 11 mod 5
Вернемся к нашей задаче, где нас интересует нахождение четных элементов массива. Для ее решения нужно подойти к составлению кода логически .
Каков остаток при делении четного числа на 2? Верно, остаток всегда равен нулю. (Подробнее о четности вы можете прочесть в статье оператор div и оператор mod) То есть нам просто нужно использовать цикл с условием вида
if s[i] mod 2 = 0 then
Ну а теперь код всей задачи (как в помните нам еще было необходимо подсчитать количество четных чисел и вывести их всех на экран)
var i,x,y:integer;s:array [1..10] of integer;
begin
for i:=1 to 10 do
read(s[i]);
for i:=1 to 10 do
if s[i] mod 2=0 then begin
writeln (s[i]);
y:=y+1;
end;
writeln;
writeln(‘количество четных чисел = ‘,y)
end.
Напишем программу, которая подсчитывает количество четных элементов в массиве.
Подсчет количества четных элементов в массиве.
program massiv7; uses crt; const N=10; type x=array [1..N] of integer; var a:x; i:integer; k:integer; begin clrscr; randomize; for i:=1 to N do begin a[i]:= +10+random (91); write (A[i]:5) end; writeln; k:=0; for i:=1 to N do if a[i] mod 2=0 then begin k:=k+1 end; writeln (‘Количество четных элементов = ’,k:5); readln end.
В строке №7 записываем переменную для хранения количества четных элементов
В строке №13 заполняем массив случайными числами в диапазоне от +10 до +100 (включая 100).
В строке №17 переменной для хранения количества четных чисел присваиваем первоначальное значение равное 0.
В строке №19 записываем условие: если значение элемента массива (т.е. если сгенерированное число) делиться на 2 без остатка (т.е. остаток от целочисленного деления равен 0), то прибавляем к переменной K единицу (т.е. при наличии четного числа «K» увеличивается на 1).
Предыдущая статья : Вычисление суммы положительных элементов массива.
Оглавление : Уроки Паскаль.
Следующая статья : Определение наличия в массиве отрицательных чисел.
Иван 123 |
|
1 |
|
как найти количество четных чисел в массиве11.03.2010, 20:49. Показов 25159. Ответов 2
Подскажите ,как найти количество четных чисел в массиве |
Ngx1 2 / 2 / 4 Регистрация: 28.02.2010 Сообщений: 9 |
||||
11.03.2010, 23:50 |
2 |
|||
Сообщение было отмечено как решение Решение
0 |
Inadequate Retired 7726 / 2558 / 671 Регистрация: 17.10.2009 Сообщений: 5,100 |
||||
12.03.2010, 08:02 |
3 |
|||
0 |
var n,i,k,a:integer; begin writeln('введите количество чисел'); readln(n); a:=0; for i:=1 to n do begin writeln('введите ',i:1,'-е число'); readln(a); if a mod 2=0 then k:=k+1; end; writeln('кол-во четных чисел ',k); readln; end.
Похожие записи/страницы:
- Написать программу включив подсчет общего количества вводимых чисел, исключая ноль; подсчет четных чисел -…
- Ввести с клавиатуры n чисел. Определить количество нечетных – Pascal (Паскаль)
- Написать программу для наглядного представления подсчета четных и нечетных чисел. В цикле вводить целые числа x . На…
- Создать файл abcd.dat, содержащий элементы типа integer. Из компонентов данного файла сформировать массивы четных и…
- Подсчитать количество четных элементов массива, заданного датчиком случайных чисел – Pascal(Паскаль)
- Дано натуральное число:а)сколько чётных цифр в данном целом числе;б)верно ли, что в данном числе встречаются цифры А и В…
- Дан массив, содержащий 10 чисел. Вычислить сумму четных элементов. Ввести с клавиатуры х. Определить количество…
- Посчитать количество парных чисел из 21 что вводит пользователь – Pascal(Паскаль)
Раздел:
Задачи /
Простейшие /
Найти количество четных чисел в массиве
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее… |
Условие задачи 2.74
Задача 2.74
Дан одномерный массив А неупорядоченных целых чисел. Вывести на экран количество чётных чисел, расположенных от начала массива до положения первого наибольшего элемента.
Сегодня я покажу вам, как из простой задачи сделать сложную )))
На самом деле, конечно, усложнение будет кажущимся. Ну да, я буду
использовать константы,
пользовательские типы данных и
функции, хотя для такой задачи можно было бы обойтись и без них.
Но моя цель – не только показать решение, но и приблизить новичка к тому, как создаются настоящие программы.
Само решение я описывать не буду. Опытные и так поймут, а новичкам будет
полезно разобраться самим (если что – в примерах программ есть
комментарии). А расскажу только о том, для чего я использовал те или иные ходы. Итак…
Для чего используются константы, я уже говорил не раз. Но не грех и повторить. Если одно и то же постоянное значение имеется в программе в нескольких местах, то в случае его замены на другое, вам придётся менять это значение во всех участках программы. А это, во-первых, займёт больше времени, а во-вторых, где-то это значение можно просто пропустить. Если же вы используете константу, то при замене значения вам надо будет изменить его только в одном месте программы. Кроме того, давая константам осмысленные имена, вы будет понимать, для чего используется это значение, найдя имя константы в вашей программе из миллиона строк.
Зачем использовать пользовательский тип данных?
Тоже две причины.
Во-первых, в Паскале вы не можете в объявлении функции в качестве
параметра использовать массив. То есть вот так:
function GetIndexMaxValue(M : array[1..MAX_INDEX] of WORD) : WORD;
не проканает. Компилятор будет шибко
ругаться, однако. Поэтому сначала надо определить новый
тип данных, например, вот так:
type TMas = array[1..MAX_INDEX] of WORD;
а потом уже можно объявить функцию, например, вот так:
function GetIndexMaxValue(M : TMas) : WORD;
Ну а почему бы тогда не использовать массив как глобальную переменную и не париться?
Дело в том, что использовать в подпрограммах глобальные переменные без крайней необходимости считается дурным тоном. И это не спроста.
Представьте, что у вас объявлен массив с элементами типа
BYTE, и вы работаете с ним в нескольких
функциях. Да так работаете, что приходится в функциях создавать
локальные переменные – массивы с элементами типа BYTE. Это уже сильно
неудобно. Но ещё веселее будет, если вам вдруг потребуется изменить тип
элементов (например, WORD вместо BYTE). Надеюсь, вы понимаете, к чему я
клоню. И это вторая причина применять пользовательский тип данных для
массива.
Осталось рассказать, для чего используются функции в такой простой программе. Ну здесь ничего необычно – чтобы упростить исходный код основной программы.
Да, в этой учебной программе можно было обойтись и без лишних заморочек. Но если бы вы разрабатывали большую сложную программу, то одни и те же действия могли бы выполняться в ней несколько раз. И такие действия, конечно, удобно выполнять в виде функций.
Ну вот как-то так. А теперь примеры программ на
Паскале и
С++.
Решение задачи 2.74 на Паскале
program mytask; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const MAX_INDEX = 20; MAX_VALUE = 500; //**************************************************************** // ТИПЫ ДАННЫХ //**************************************************************** type TMas = array[1..MAX_INDEX] of WORD; //**************************************************************** // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ //**************************************************************** var i : WORD; MaxA : WORD; A : TMas; //**************************************************************** // ФУНКЦИИ И ПРОЦЕДУРЫ //**************************************************************** //**************************************************************** // Функция ищет наибольший элемент массива. // ВХОД : массив для поиска // ВЫХОД : индекс элемента с наибольшим значением //**************************************************************** function GetIndexMaxValue(M : TMas) : WORD; var i, MaxWord, MaxM : WORD; begin MaxM := 0; MaxWord := Low(MaxWord); //Найти наибольший элемент в массиве for i := 1 to MAX_INDEX do if M[i] > MaxWord then begin MaxWord := M[i]; MaxM := i; end; Result := MaxM; end; //**************************************************************** // Функция подсчитывает количество чётных чисел в массиве до // указанного элемента. // ВХОД : М - массив для поиска, // N - индекс элемента, до которого выполняется поиск // ВЫХОД : количество чётных чисел до элемента с индексом N //**************************************************************** function GetNumOdd(M : TMas; N : WORD) : WORD; var i, NumOdd : WORD; begin Result := 0; //Если просматривать массив не далее 1-го элемента if N < 2 then begin if (not Odd(M[1])) then Result := 1; Exit; end; NumOdd := 0; for i := 1 to N-1 do if (not Odd(M[i])) then Inc(NumOdd); Result := NumOdd; end; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin Randomize; // Заполнить массив случайными числами for i := 1 to MAX_INDEX do A[i] := Random(MAX_VALUE); // Вывести массив на экран (значения с индексами) for i := 1 to MAX_INDEX do Write('[', i, ']', A[i], ' '); // Вычислить и вывести результат MaxA := GetIndexMaxValue(A); WriteLn(#10#13, 'The index of the largest element: ', MaxA); WriteLn('Number of even numbers: ', GetNumOdd(A, MaxA)); WriteLn('The end. Press ENTER...'); ReadLn; end.
Решение задачи 2.74 на С++
#include <cstdlib> #include <iostream> //**************************************************************** // КОНСТАНТЫ //**************************************************************** const int MAX_INDEX = 20; const int MAX_VALUE = 500; //**************************************************************** // ТИПЫ ДАННЫХ //**************************************************************** typedef unsigned short int TMas[MAX_INDEX-1]; using namespace std; unsigned short int i; unsigned short int MaxA; TMas A; //**************************************************************** // ФУНКЦИИ И ПРОЦЕДУРЫ //**************************************************************** //**************************************************************** // Функция ищет наибольший элемент массива. // ВХОД : массив для поиска // ВЫХОД : индекс элемента с наибольшим значением //**************************************************************** unsigned short int GetIndexMaxValue(TMas M) { unsigned short int i, MaxWord, MaxM; MaxM = 0; MaxWord = 0; //Найти наибольший элемент в массиве for (i = 0; i < MAX_INDEX; i++) if (M[i] > MaxWord) { MaxWord = M[i]; MaxM = i; } return(MaxM); } //**************************************************************** // Функция подсчитывает количество чётных чисел в массиве до // указанного элемента. // ВХОД : М - массив для поиска, // N - индекс элемента, до которого выполняется поиск // ВЫХОД : количество чётных чисел до элемента с индексом N //**************************************************************** unsigned short int GetNumOdd(TMas M, unsigned short int N) { unsigned short int i, NumOdd; NumOdd = 0; //Если просматривать массив не далее 1-го элемента if (N < 1) { if ((M[0] % 2) == 0) return(1); else return(0); } for (i = 0; i < N; i++) if ((M[i] % 2) == 0) NumOdd++; return(NumOdd); } //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** int main(int argc, char *argv[]) { srand(time(0)); //Запустить генератор случайных чисел // Заполнить массив случайными числами for (i = 0; i < MAX_INDEX; i++) A[i] = rand() % MAX_VALUE; // Вывести массив на экран (значения с индексами) for (i = 0; i < MAX_INDEX; i++) cout << "[" << i << "]" << A[i] << " "; // Вычислить и вывести результат MaxA = GetIndexMaxValue(A); cout << endl << "The index of the largest element: " << MaxA << endl; cout << "Number of even numbers: " << GetNumOdd(A, MaxA) << endl; system("PAUSE"); return EXIT_SUCCESS; }
ПРИМЕЧАНИЕ
Небольшое пояснение всё-таки дам. В функции GetNumOdd на первый взгляд
слишком много лишнего. Но это связано с тем, что по условию задачи
нам надо вывести чётные элементы до положения
первого наибольшего элемента. То есть если наибольший элемент будет
также чётным, то его учитывать не надо. Решение, которое я применил,
не является самым изящным и самым простым. Можно было добиться того же итога более красиво. Если хотите – попробуйте. Можете считать это домашним заданием )))
ПРИМЕЧАНИЕ
Обратите внимание, что в примере на С++ индексация массива начинается с 0, поэтому исходный код не вполне соответствует примеру на Паскале.
ВНИМАНИЕ!
Если вам что-то осталось непонятно, то советую почитать книги
“Основы программирования” и
“Основы С++”.
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение – ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. |