Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 01.11.2009, 14:36   #1 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Thumbs up Паскаль. Обработка таблицы

Помогите, пожалуйста, написать следующую программу..
Задание: Найти минимальный среди максимальных элементов столбцов таблицы.

Требуется написать подпрограмму обработки прямоугольной таблицы вещественных чисел. Подпрограмма должна реализовывать вычислительный алгоритм, который получает саму таблицу и ее размеры (т.е. количество строк и столбцов) в качестве входных параметров, а в качестве выходного параметра – результат вычислений. Кроме того, должна быть написана программа, которая позволяет создать таблицу заказанных пользователем размеров, вызвать подпрограмму обработки и вывести на экран результат вычислений.
Вот требования:
1. Таблица хранится в виде двумерного статического массива достаточно больших размеров. Определен тип «таблица» (это нужно для того, чтобы передать таблицу в подпрограмму). Максимальные индексы массива, используемые при описа-нии типа, хранятся в виде констант.
2. Основная подпрограмма не содержит операций ввода-вывода. Параметры подпрограммы: таблица (по ссылке), факти-ческие размеры таблицы (по значению), основной результат – по ссылке. Подпрограмма содержит описание спецификации (в виде комментария под заголовком).
3. Работа тестирующей программы организована в виде простейшего меню, позволяющего создавать таблицу, выпол-нять ее обработку, показывать результат и заканчивать работу.
4. Фактические размеры таблицы указываются пользователем. Заполнение таблицы осуществляется двумя способами (по выбору пользователя) с клавиатуры (простейший последовательный ввод элементов) и случайным образом.
5. Алгоритм реализован без создания вспомогательной таблицы (при необходимости можно пользоваться вспомогатель-ным одномерным массивом).

Буду очень благодарна за помощь
Montespan вне форума   Ответить с цитированием

Старый 01.11.2009, 14:36
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Кто то уже создавал подобные темы на этом форуме

Добавление таблицы на сайт с SMC Joomla
Связать 2 Excel таблицы в Wordе
Паскаль. Обработка натурального числа
Обработка матриц. Паскаль

Старый 01.11.2009, 15:04   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Montespan Посмотреть сообщение
Помогите, пожалуйста, написать следующую программу.
Язык какой?
Vladimir_S вне форума   Ответить с цитированием
Старый 01.11.2009, 15:53   #3 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Самое главное забыла.. Паскаль.
Начало я написала.
program tablica;
uses crt;
const max_s= 50;
max_d= 50;
k=100;
var a:array[1..max_d,1..max_s] of integer;
d, s, i, j, z: integer;
begin
d:=-1;
s:=-1;

repeat
clrscr;
writeln ('Введите длину таблицы. Максимальное значение ' ,max_d);
read (d)
until (d>=1) and (d<= max_d);
{clrscr; }
repeat
clrscr;
writeln ('Введите ширину таблицы. Максимальное значение ' ,max_s);
read (s)
until (s>=1) and (s<= max_s);
repeat
clrscr;
writeln ('Выберете способ ввода значений таблицы');
writeln ('1- если хотите выполнить ввод с клавиатуры');
writeln ('2- для случайного вводa');
readln (z);
until (z=1) or (z=2);

if z=1 then
begin
for i:=1 to d do
begin
for j:=1 to s do
begin
writeln('Введите значение ячейки таблицы a[',i,',',j,']');
readln (a[i,j]);
end;
end;
end;

if z=2 then
begin randomize;
for i:=1 to d do
for j:=1 to s do
a[i,j]:=random (k);
writeln (a[i,j]);
end;

clrscr;
for i:=1 to d do
begin
for j:=1 to s do
write(a[i,j],' ');
writeln;
end;
readln;
end.а дальше как?

Последний раз редактировалось Montespan; 01.11.2009 в 19:05
Montespan вне форума   Ответить с цитированием
Старый 01.11.2009, 20:42   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Montespan Посмотреть сообщение
Самое главное забыла.. Паскаль.
Начало я написала.
а дальше как?
А дальше (и вообще всё вместе) например, так:

program tablica;
uses crt;
const
max_s= 50;
max_d= 50;
k=99;
TYPE
AR=array[1..max_d,1..max_s] of integer;
var
a:AR;
MVcol:ARRAY[1..max_s] of integer;
d, s, i, j, Min_Max: integer;

PROCEDURE Table_Inp(Dti,Sti:INTEGER; VAR Ati:AR);
VAR
i,j,z:INTEGER;
BEGIN
repeat
clrscr;
writeln ('Choose the method of table infilling');
writeln ('1- from keyboard');
writeln ('2- random values');
readln (z);
until (z=1) or (z=2);

if z=1 then
begin
for i:=1 to Dti do
begin
for j:=1 to Sti do
begin
write('Enter the value a[',i,',',j,'] ');
readln (Ati[i,j]);
end;
end;
end;

if z=2 then
begin
randomize;
for i:=1 to Dti do
for j:=1 to Sti do
Ati[i,j]:=random (k);
end;

clrscr;
for i:=1 to Dti do
begin
for j:=1 to Sti do
write(Ati[i,j]:3);
writeln;
end;
readln;
END; {Table_Inp}


begin
d:=-1;
s:=-1;

repeat
clrscr;
write('Enter the table length. Maximum value is ' ,max_d,' ');
readln(d)
until (d>=1) and (d<= max_d);
{clrscr; }
repeat
clrscr;
write('Enter the table width. Maximum value is ' ,max_s,' ');
readln(s)
until (s>=1) and (s<= max_s);

Table_Inp(d,s,a);

FOR j:=1 TO s DO
begin
MVcol[j]:=a[1,j];
FOR i:=2 TO d DO
IF a[i,j]>MVcol[j] THEN MVcol[j]:=a[i,j];
end;


Min_Max:=MVcol[1];
FOR i:=2 TO s DO
IF Min_Max>MVcol[i] THEN Min_Max:=MVcol[i];

Writeln('Minimum value is ',Min_Max);
ReadLn;
end.

Пояснение. Надписи заменены английскими, чтобы избежать проблем с кодировками кириллицы при переходе WINDOWS-DOS и обратно. Если надо, можете восстановить русские надписи.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.11.2009, 18:05   #5 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, огромное Вам спасибо!
Montespan вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 15.11.2009, 15:16   #6 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S,
Цитата:
program tablica;
uses crt;
const
max_s= 50;
max_d= 50;
k=99;
TYPE
AR=array[1..max_d,1..max_s] of integer;
var
a:AR;
MVcol:ARRAY[1..max_s] of integer;
d, s, i, j, Min_Max: integer;

PROCEDURE Table_Inp(Dti,Sti:INTEGER; VAR Ati:AR);
VAR
i,j,z:INTEGER;
Поясните, пожалуйста, Dti и Sti - это длина и ширина таблицы соответственно? Почему нельзя использовать s и d, описанные в глобальных переменных программы? Ati - это имя массива?
Заранее спасибо!
Montespan вне форума   Ответить с цитированием
Старый 15.11.2009, 15:30   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Montespan Посмотреть сообщение
Vladimir_S,
Поясните, пожалуйста, Dti и Sti - это длина и ширина таблицы соответственно? Почему нельзя использовать s и d, описанные в глобальных переменных программы? Ati - это имя массива?
Заранее спасибо!
Можно. Это, как бы сказать, чистой воды эстетство. Просто предпочитаю для параметров процедуры и глобальных переменных программы использовать разные идентификаторы. IMHO дисциплинирует и повышает читабельность. Потому и добавил "ti" - сокращение от имени процедуры "Table_Inp".
Vladimir_S вне форума   Ответить с цитированием
Старый 16.11.2009, 16:56   #8 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Разобралась, спасибо большое. Не могли бы вы помочь выполнить еще несколько требований к этой же программе?
1. В подпрограмме выполняется проверка входных параметров на допустимость. Подпрограмма возвращает код завер-шения по ссылке или в качестве значения функции, который показывает, правильно ли выполнилась подпрограмма.
2. Возможность заполнения таблицы из типизированного (или нетипизированного) файла с проверкой корректности имени файла и его содержимого. При этом размеры таблицы хранятся в начале того же файла.
3. Делается проверка корректности ввода чисел, т.е. защита от ввода вместо чисел посторонних символов.
4. Таблица реализована как двумерный динамический массив с использованием механизма указателей.
Montespan вне форума   Ответить с цитированием
Старый 16.11.2009, 21:15   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Montespan Посмотреть сообщение
Разобралась, спасибо большое. Не могли бы вы помочь выполнить еще несколько требований к этой же программе?
1. В подпрограмме выполняется проверка входных параметров на допустимость. Подпрограмма возвращает код завер-шения по ссылке или в качестве значения функции, который показывает, правильно ли выполнилась подпрограмма.
2. Возможность заполнения таблицы из типизированного (или нетипизированного) файла с проверкой корректности имени файла и его содержимого. При этом размеры таблицы хранятся в начале того же файла.
3. Делается проверка корректности ввода чисел, т.е. защита от ввода вместо чисел посторонних символов.
4. Таблица реализована как двумерный динамический массив с использованием механизма указателей.
За пункт 4 точно не возьмусь - я в своих программах указателями и динамическими переменными почти не пользуюсь, знаю их плохо. Насчет остальных - поразмыслю. Скоро не обещаю. А когда нужно?
Vladimir_S вне форума   Ответить с цитированием
Старый 17.11.2009, 17:52   #10 (permalink)
Montespan
Member
 
Регистрация: 01.11.2009
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, нужно до воскресенья. Спасибо большое!
Montespan вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:44.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.