Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 102
от 22.11.2005, 20:24

Администратор:Калашников О.А.
В рассылке:Подписчиков: 143, Экспертов: 40
В номере:Вопросов: 2, Ответов: 6


Вопрос № 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
Комментарий оценки:
Спасибо хоть за один ответ :) только я так сделала, а мне сказали неправильно... вот.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное