Паскаль.Массивы.Выборочное произведение

Ответить
РомКа
Сообщения: 6
Зарегистрирован: 21 янв 2009, 14:59

Помогите пожалст началась практика а в паскале не очень силен, да и еще в массивах :(

В массиве M[15]-целых чисел найти произведение элементов, оканчивающихся на цифру 3 или 5.

Буду очень благодарен :)
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Пожалуйста:

uses crt;
var a:array[1..15] of integer;
i:byte;
s:string;
pr:integer;
begin
clrscr;
pr:=1;
writeln('Vvedite elementy massiva -> ');
for i:=1 to 15 do
begin
read(a);
str(a,s);
if (s[length(s)]='3') or (s[length(s)]='5') then pr:=pr*a;
end;
writeln('Proizvedenir elementov, zakanchivaiuschihsia na 3 ili 5: ',pr:6);
readln;
readln;
end.

Помогло? - оставьте отзыв.
С уважением dr.Jekill.
РомКа
Сообщения: 6
Зарегистрирован: 21 янв 2009, 14:59

спс огромное)))
Но можешь объяснить пожалуйста что означает:
s:string;
pr:=1;
str(a,s);
pr:6 в конце (writeln('Proizvedenir elementov, zakanchivaiuschihsia na 3 ili 5: ',pr:6)) :confused:
а то с таким не сталкивался и хотелось бы знать пояснение))
Creatizmo
Сообщения: 5
Зарегистрирован: 18 дек 2008, 19:52

Это так, я ради развлечения сделал, вдруг нужны будут произвидения элементов массива.

Код: Выделить всё

program r1;

// Программа вычисляющая произведения целых элементов
// массива оканчивающихся на цифры 3 и 5.
// Глеб Creatizmo Поспелов. 21 Января 2009 года.

uses crt;

const
        c = 15;
        x : array[1..c] of integer = (43,78,24,45,84,61,13,50,78,52,55,94,11,67,33);

var
        a, i, j : longint;
        s1, s2 : string;
begin
        clrscr;

        for i := 1 to c do
          begin
          str(x[i], s1);
          case  (s1[length(s1)] = '3') or (s1[length(s1)] = '5') of
          TRUE :
                begin
                for j := i + 1 to c do
                  begin
                  str(x[j], s2);
                  case (s2[length(s2)] = '3') or (s2[length(s2)] = '5') of
                  TRUE :
                        begin
                        a := x[i] * x[j];
                        writeln('Произведение чисел ',x[i],'*',x[j],' = ',a);
                        end
                  end;
                  end;
                end
          end;
          end;

        readkey;
end.
Creatizmo
Сообщения: 5
Зарегистрирован: 18 дек 2008, 19:52

РомКа писал(а):спс огромное)))
Но можешь объяснить пожалуйста что означает:
s:string;
pr:=1;
str(a,s);
pr:6 в конце (writeln('Proizvedenir elementov, zakanchivaiuschihsia na 3 ili 5: ',pr:6)) :confused:
а то с таким не сталкивался и хотелось бы знать пояснение))


s - строка.
pr - произведениe.
str(a, s) - процедура перевода элемента массива (a) из числа в строку (s).
pr:6 - форматированный вывод.
РомКа
Сообщения: 6
Зарегистрирован: 21 янв 2009, 14:59

всем большое спасибо))
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

uses crt;//подключаем графический модуль, чтобы с его помощью очищать экран во время каждого вызова программы
var a:array[1..15] of integer;//обьявили целочисленный массив
i:byte;//обьявили переменную для работы с индексами элементов массива
s:string;//обьявили строку (т.е. переменную типа строка (string), где каждый элемент типа символ (char). Другими словами строка - это массив символов: stroka[номер элемента строки]=Элемент строки ;)
pr:integer;//обьявили переменную куда сохраним произведение нужных нам элементов
begin//итак, начинаем
clrscr;//очищаем экран с помощью процедуры из модуля CRT;
pr:=1;//присваиваем нашей переменной, в которой будем хранить произведение, единицу, т.к. если она будет равна нулю, наше конечное произведение (наш ответ), тоже будет равно нулю, поскольку "Когда произведение равно нулю? Когда один из членов равен нулю"
writeln('Vvedite elementy massiva -> ');//выводим на экран приглашение пользователю начать ввод
for i:=1 to 15 do //с первого по пятнадцатый элемент массива
begin//начать
read(a);//прочитать элемент массива
str(a,s);//преобразовать его (a) в строку s, с помощью стандартной процедуры преобразования типов str
if (s[length(s)]='3') or (s[length(s)]='5') then pr:=pr*a;//если последний символ полученной строки равен трём или пяти, тогда накопить в переменной pr произведение (допустим у нас первое совпадение, тогда, т.к. мы присваивали pr единицу (pr:=1 ;) мы получим pr:=1*елемент массива, другими словами, теперь pr будет хранить первый совпавший элемент, и поэтому при следующем совпадени в pr сохранится: первый совпавший*второй совпавший - что нам и нужно;
идём дальше: s[length(s)]='3'; здесь length - стандартная функция, возвращающая размер строки(номер последнего элемента строки), соответственно length(s) - номер последнего элемента строки s.
s[номер последнего элемента строки] - как я уже говорил выше, строка это массив символов, и здесь мы обращаемся к последнему элементу (последнему символу) этого массива и (s[length(s)]='3') or (s[length(s)]='5') - сообственно проверяем не равен ли он 3 или 5)
end;//закончить цикл (перебор элементов массива)
writeln('Proizvedenie elementov, zakanchivaiuschihsia na 3 ili 5: ',pr:6);//выводим на экран наш ответ, при этом задаем чтобы на экране отображались первые 6 цифр этого числа не в экспонентциальной форме (напрмер,не так: 1000=10e2, и 0,0001=10e-5)
readln;//отображаем всю информацию на экране до нажатия пользователем любой кнопки
end.//конец программы
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ой...
s:=1;
for i:=1 to 15 do if M mod 10 in [3,5] then s:=s*M;
writeln(s);
Заполнение массива перед этим - см. в других примерах.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Хыиуду, а почему mod 10? А если у нас элемент одна цифра?
Нет религии выше истины
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

И что из этого? Число 3 у нас не оканчивается на цифру 3?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить