Вопрос № 29682: Одномерные массивы:
1. Найти произведение элементов массива, кратных 3 и 9.
2. Удалить наименьший элемент массива вещественных чисел...Вопрос № 29725: Уважаемые эксперты! Подскажите, пожалуйста, с помощью какой процедуры можно вывести результаты в Паскале, например, в 4 столбика. Если можно с примерами.
С глубочайщим уважением, Mary....
Вопрос № 29.682
Одномерные массивы:
1. Найти произведение элементов массива, кратных 3 и 9.
2. Удалить наименьший элемент массива вещественных чисел
Отправлен: 16.11.2005, 21:44
Вопрос задала: Chai (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: mvp
Здравствуйте, Chai!
1. Не совсем чётко задан вопрос: кратных и 3 и 9? Но с другой стороны, если число кратно 9, то оно будет и кратно 3. Так что не совсем непонятно.
Предположу, что нужно найти отдельно для кратных 3 и отдельно для кратных 9:
const n = ...
var
a : array[1..n] of integer;
k3, k9 : real;
i : integer;
k3yes, k9yes : boolean;
begin
{...}
k3 := 1;
k9 := 1;
k3yes := false;
k9yes := false;
for i := 1 to n do
begin
if a[i] mod 3 = 0 then
begin
k3yes := true;
k3 := k3 * a[i]
end;
if a[i] mod 9 = 0 then
begin
k9yes := true;
k9 := k9 * a[i]
end;
end;
if not k9yes then
begin
writeln('Proizvedenie kratnyh 3-m: ', k3);
writeln('proizvedenie kratnyh 9-i: ', k9)
end
else
begin
writeln('NetChisel kratnyh 9-i!');
if not k3yes then writeln('Proizvedenie kratnyh 3-m: ', k3) else writeln('Net chisel kratnyh 3-m!')
end;
end.
2. Что значит удалить из массива? В паскале нет динамических массивов, чтобы из них можно было удалять. Разве что скопировать в другой массив:
const n=...;
var a : array[1..n] of real;
b : array[1..n-1] of real;
i, minIndex : integer;
min : real;
begin
{...}
min := a[1];
minIndex := 1;
for i := 1 to n do if a[i] < min then
begin
minIndex := i;
min := a[i]
end;
for i:= 1 to minIndex - 1 do b[i] := a[i];
for i:= minIndex + 1 to n do b[i - 1] := a[i];
//vyvodym massiv b
end;
P. S. Очень не чётко сформулированные вопросы, но может я где-то и угадал :)
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: 10-ый класс)
Отправлен: 16.11.2005, 22:19
Отвечает: Schmak
Здравствуйте, Chai!
1) Если число делится на 9, то оно делится и на 3 поэтому достаточно лишь одно проверки
const MAX=100; //Кол-во элментов
var
a:array [1..MAX] of integer; //массив integer
i:integer;
p:longint; //longint чтобы не было переполнения, если массив real, то и здесь real
begin
for i:=1 to MAX do
a[i]:=random(200)+1; //Заполнение массива
p:=1; //Произведение
for i:=1 to MAX do
if a[i] mod 3=0 then p:=p*a[i];
writeln(p);
readln;
end.
2)
const MAX=10; //Кол-во элментов
var
a:array [1..MAX] of real;
i,min:integer;
begin
for i:=1 to MAX do
a[i]:=(random(200)+1)/(random(200)+1); //Заполнение массива
for i:=1 to MAX do
write(a[i]:0:2,' '); //Вывод первоначального массива
min:=1;
for i:=2 to MAX do
if a[i]<a[min] then min:=i; //Поиск номера минимального элемента
for i:=min to MAX-1 do
a[i]:=a[i+1]; //Сдвиг элементов после удаления минимального
a[MAX]:=-1000;
writeln;
for i:=1 to MAX do
write(a[i]:0:2,' '); //Вывод конечного массива
readln;
end.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: 9-ый класс)
Отправлен: 17.11.2005, 05:44
Вопрос № 29.725
Уважаемые эксперты! Подскажите, пожалуйста, с помощью какой процедуры можно вывести результаты в Паскале, например, в 4 столбика. Если можно с примерами.
С глубочайщим уважением, Mary.
Отправлен: 17.11.2005, 16:03
Вопрос задала: Mary (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Schmak
Здравствуйте, Mary!
Я думаю Вам подойдёт следующее:
1) Выводите таблицу по ячейке write(t:6), в данном случае если данные в ячейке короче 6 то перед ними вставляется нескоько пробелов, так чтобы длина строки стала равна 6. Естественно вместо 6 можно подставить любое число или переменную.
2)В конце вывода каждой строки таблицы пишите Writeln;
В даннном ниже примере выводится таблица умножения, при чём каждый следующий столбец шире предыдущего на 1:
var i,j:integer;
begin
for i:=1 to 9 do
begin
for j:=1 to 10 do
write(i*j:(j+1));
writeln;
end;
readln;
end.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: 9-ый класс)
Отправлен: 17.11.2005, 16:30
Отвечает: Vadim Vitomsky
Здравствуйте, Mary!
Проще всего воспользоваться стандартной процедурой WriteLN.
Для чисел можно задавать значущее кол-во знаков после запятой, напр.
var r : Real;
begin
...
r := 1.235;
WriteLn(r:5:2);
Примечание: для целых чисел и строк используется только одно число, задающее кол-во выводимых знаков:
WriteLN(int_num:5);
Для того, чтобы разделить несколько значений промежутком, можно использовать символ табуляции #09:
WriteLn(val1:5:2,#09,val2:5:2,#09,val3:5,#09,val4:10);
Данный пример выведет 4 значения заданым форматом в 4 колонки с равномерными промежутками.
Аналогично можно использовать и другие служебные символы (почти каждый имеет свое значение).
Ответ отправил: Vadim Vitomsky (статус: 3-ий класс)
Отправлен: 17.11.2005, 17:00
Отвечает: sir henry
Здравствуйте, Mary!
Никакой процедуры для этого, кроме как WriteWriteLn нет. В этом макросе есть специальные возможности для форматирования вывода (правда не такие мощные как в Си). Например у Вас есть массив с данными, который нужно вывести в 4 столбика:
var
arr: array[0..3, 0..5] of integer; {массив с данными}
i, j: integer; {служебные переменные}
Begin
For i:=0 To 3 Do {Вывод столбцов}
Begin
For j:=0 To 5 DO {Вывод строк}
Write(arr[i,j]:8);
WriteLn;
End;
End;
Здесь данные массива выводится на экран в 4 столбца (по количеству их в массиве). Длина каждого столбца фиксирована и равна 8 симолов.
Если Вы заглянете в хелп по Паскалю (уверяю Вас, там много интересного), то Вы увидите общий синтаксис WriteWriteLn:
WriteLn(Переменная:Ощая_длина_в_символах:Длина_части_после_запятой)
Естественно, что "Длина_части_после_запятой" относится лишь к тем типам данных у которых есть десятичная запятая. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.11.2005, 17:01
Отвечает: Whisper
while presskey() do
begin
for i= 1 to 4 do
begin
write(); - выводишь что тебе надо, и разделители в строку, всего 4ре штуки
end;
writeln; после 4го вывода перевод строки и так до presskey()
end;
--------- все тленно
Ответ отправила: Whisper (статус: 1-ый класс)
Отправлен: 18.11.2005, 09:27 Оценка за ответ: 5 Комментарий оценки: Спасибо хоть за один ответ :) только я так сделала, а мне сказали неправильно... вот.