Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 19:47   #1
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию Паскаль выделение участка массива

Добрый вечер. Нужна помощь в написании программы на паскале.
Задача состоит в том, чтобы написать программу, которая из исходного массива ( максимум 10 эл-тов ) вытаскивает кусок, который заключен между элементами нулями и создает новый массив. ( т.е. например массив исходный: 1 2 5 0 8 5 4 0 3 0 - требуемый массив - 8 5 4 ) Нули берутся только 1-ый и 2-ой.
Я не могу написать "счетчик" кол-ва элементов между этими самыми нулями.
Вот что у меня получилось:
PHP код:
program reset;
uses crt;
var
a,b:array[1..10of integer;
i,n,k:integer;
n1,n2:integer;
begin
clrscr
;
repeat
write
('Кол-во элементов в исходном массиве - ');
read(n);
 if (
n<=0) or (n>10then
  begin
   writeln
('Число элементов строго больше 0 и нестрого меньше 10');
  
end;
until (n>=1) and (n<=10);
 for 
i:=1 to n do
  
begin
   write
('Сейчас задаем''[',i,']''элемент массива а, равный - ');
   
read(a[i]);
  
end;
 
writeln;
 
writeln('исходный массив');
  for 
i:=1 to n do
   
write(a[i],' ');
  
writeln;
  
k:=0;
   for 
i:=1 to n do
    if (
a[i]=0then
     begin
      k
:=k+1;
     
end
    
else
     
k:=k+0;
      if (
k>=2then
       begin
        writeln
('Количество нулей в массиве ',k);
        
writeln;
       
end
      
else
       
writeln('нулей в массиве нет');
      
n1:=0;      {}
       for 
i:=1 to n do
        if (
a[i]=0then
         begin
          n1
:=a[i];
         
end;
        
n2:=0;
         for 
i:=n1 to n do
          if (
a[i]=0then
           begin
            n2
:=a[i];
           
end;
          

repeat
until keypressed
;
end
а - исходный массив.
b - массив, который - результат.
n1 и n2 - переменные - которым присваиваю 1 и 2 нули из массива а.
k - счетчик нулей.
Brian Spilner вне форума Ответить с цитированием
Старый 25.03.2010, 19:52   #2
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

Код:
for i:=1 to n do
if a[i]=0 then begin k:=i;break;end;
k:=k+1;
c:=0;
while a[k]<>0 do
begin
inc(c);
b[c]:=a[k];
inc(k);
end;
Google2010 вне форума Ответить с цитированием
Старый 25.03.2010, 20:22   #3
Brian Spilner
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 14
По умолчанию

А что тут С и что тут К?
Brian Spilner вне форума Ответить с цитированием
Старый 02.05.2010, 16:09   #4
Ольга19
 
Регистрация: 02.05.2010
Сообщений: 3
По умолчанию Программа на языке Паскаля

Добрый вечер. Помогите, пожалуйста. Я написала программу, но в ней не работает сортировка.
Задание состоит в том, чтобы отсортировать столбцы матрицы по не-убыванию сумм положительных элементов. Сортировка Шелла с заданной в виде локального константного массива последовательностью приращений.
Я пишу модуль и тестирующую программу.
Вот их текст:
unit Massiv;

interface
type
T_Int=integer;
T_Elem=real;
T_Key=T_Elem;
PKey=^TKey;
TIntarr=array [1..10] of T_Int;
T_Real=byte;
T_Log=boolean;
T_Long=longint;
T_Arr=array[1..1] of T_Elem;
P_Arr=^T_Arr;
T_Array=array[1..1] of P_Arr;
P_Array=^T_Array;
P_Matr=^C_Matr;
TElem= record
key :T_Key;
data: P_Arr;
end;
TKey=array[1..1] of TElem;

C_Matr=object
private
a:P_Array;
str , st:T_Int;
public
procedure Failure(key:T_Real);
constructor Init(rstr,rst:T_Int);
destructor Done;
function ShellSort : boolean;
procedure natsch;
procedure izmenit(i,j:T_Int; x:T_Elem);
function Get(i,j:T_Int):T_Elem;
function GetStr:T_Int;
function GetSt:T_Int;
function istab:T_log;
end;

implementation
uses crt;
{+++++++}
procedure C_Matr.Failure;
begin write('ЋиЁЎЄ*. ');
case key of
1: writeln('*Ґ¤®бв*в®з*® Ї*¬пвЁ');
2: writeln('Ё*¤ҐЄбл §*¤**л *ҐЄ®а४в*®');
3: writeln('в*Ў«Ёж* *Ґ ᮧ¤***');
4: writeln( '*ҐЄ®а४в*® §*¤**л а*§¬Ґал в*Ў«Ёжл');
end;
readln;
end;
{+++++}
constructor C_Matr.Init(rstr:T_Int; rst:T_Int);
const sizesegm=65536;
var p,i:T_Int;
needstr,needst:longint;
e:T_Log;
begin
e:=true;
i:=0;
str:=rstr;
st:=rst;
begin
needst:=longint(st)*sizeof(T_Elem);
needstr:=longint(str)*sizeof(P_Arr) ;
if (needstr<maxavail) and (needstr<sizesegm) then
begin
getmem(a,needstr); {videlenie pamati}
for p:=1 to str do
if e and (needst<maxavail) and (needst<sizesegm)
then
begin
getmem(a^[p],needst);
i:=i+1;
end
else e:=false;
end
else e:=false;
end;
if not e then
begin
Failure(1);

if i>0 then for p:=1 to i do freemem(a^[p],needst);
freemem(a,needstr);
a:=nil;
end
else for i:=1 to str do
for p:=1 to st do a^[i]^[p]:=0;
end;

{+++++}
destructor C_Matr.Done;
var
j:T_Int;
begin
for j:=1 to (str) do
begin
freemem(a^[j],longint(st)*sizeof(T_Elem));
end;
freemem(a,longint(str)*sizeof(P_Arr ));
end;

{++++}
procedure C_Matr.natsch;
begin
str:=0;
st:=0;
a:=nil;
end;
{++++++}
function C_Matr.Istab:T_log;
begin
if (a=nil) then Istab:=false else Istab:=true;
end;
{+++++++}
procedure C_Matr.Izmenit;
begin
if not IsTab then Failure(3)
else if (i<0) or (i>str) or (j<0) or (j>st) then Failure(2)
else a^[i]^[j]:=x;
end;
{+++++++}
function C_Matr.Get(i,j:T_Int):T_Elem;
begin
if not IsTab then Failure(3)
else if (i<0) or (i>str) or (j<0) or (j>st) then Failure(2)
else Get:=a^[i]^[j];
end;
{++++++++}
function C_Matr.GetSt:T_Int;
begin
if not IsTab then Failure(3)
else GetSt:=st;
end;
{+++++++}
function C_Matr.ShellSort;
type TKey=array[1..1] of TElem;
PKey=^TKey;
var i,j,k,l,g,m,n: T_Int;
h: TIntarr;
key: PKey;
sum, Tmp: T_Elem;
P: P_Arr;
c: boolean;

begin

if (longint(st*sizeof(T_Elem)) < Maxavail) and (a<>nil) then
begin
ShellSort:=true;
getmem (key, st*sizeof(T_Elem));
for j:=1 to st do
begin
sum:=0;
for i:=1 to str do
begin
if a^[j]^[i]>0 then sum:=sum+a^[j]^[i];
end;
key^[j].key:=sum;
end;

begin
j:=st;
g:=(j div 2);
repeat
n:=g;
repeat
m:=n-g;
c:=True;
repeat
if key^[m].key<=key^[m+g].key then c:=False
else
begin
Tmp:=key^[m].key;
key^[m].key:=key^[m+g].key;
key^[m+g].key:=Tmp;
end;
dec(m)
until not((m>=0)and(C));
inc(n)
until not(n<=j);
g:=g div 2;
until g=1;
end;


Freemem (key, st*sizeof(T_Elem));
end
else
begin
ShellSort:=false;
Failure(1);
end;
end;




{++++}
function C_Matr.GetStr:T_Int;
begin
if not Istab then Failure(3)
else GetStr:=str;
end;


end.

Спасибо
Ольга19 вне форума Ответить с цитированием
Старый 02.05.2010, 16:13   #5
Ольга19
 
Регистрация: 02.05.2010
Сообщений: 3
По умолчанию

я запускаю тестирующую, а там все кроме сортировки работает(
Вообще требования такие:
1. Данные хранятся в виде объекта класса «матрица». Внутри класса данные хранятся в виде двумерного динамического массива, организованного в виде столбца указателей на строки или строки указателей на столбцы – в зависимости от алгоритма сортировки (за основу можно взять реализацию класса с семинарского занятия № 1). Класс должен быть описан в отдельном модуле и может использовать фатальную обработку ошибок.
2. Алгоритм сортировки оформлен в виде подпрограммы, свободной от операций ввода-вывода. Эта подпрограмма может быть реализована как метод класса, как дружественная функция или независимо. Параметры подпрограммы: указатель на объект (если не метод класса), функция, сравнивающая строки (столбцы) на упорядоченность (если невозможна сортировка по ключам). Подпрограмма адекватно реагирует на неверные входные данные и возвращает код завершения, если она не метод класса, или вызывает обработчик ошибок класса в противном случае.
3. Фактические размеры матрицы при создании указываются пользователем. Заполнение матрицы осуществляется тремя способами (по выбору пользователя): с клавиатуры (с помощью редактора матриц), случайным образом и из типизированного или двоичного (но не текстового!) файла с проверкой корректности его имени и содержимого (способ упаковки матрицы в файл такой же, как в задании № 3 в 1-м семестре).
4. Подпрограмма-редактор должна содержать минимальный набор операций (перемещение по матрице с помощью стрелок, редактирование элемента матрицы с проверкой правильности введенного числа, выход), внизу экрана должна быть строка состояния, которая содержит информацию о текущем элементе матрицы (его индексы в матрице и полное значение в научном формате), и подсказка по используемым клавишам. Вызов алгоритма сортировки в число функций редактора включать не следует! Редактор может быть написан не самостоятельно, но в его работе надо хорошо разбираться (при этом имеется в виду редактор, удовлетворяющий минимальным требованиям). Ввод любых данных с клавиатуры не должен вызывать аварийного завершения работы программы.
5. Работа тестирующей программы организована в виде простейшего меню, позволяющего создавать таблицу, выполнять ее сортировку, показывать результат (вызов редактора), сохранять текущую матрицу в файле и заканчивать работу. При создании новой матрицы старая уничтожается (с запросом на сохранение в файле), т.е. в каждый момент времени в памяти находится не более одного объекта.
6. Любые необратимые действия с матрицей должны выполняться только после запроса на подтверждение.
7. При сдаче программы преподавателю следут приготовить несколько тестовых примеров с матрицами небольшого размера, хранящимися в файлах, на которых легко проверить правильность работы алгоритма сортировки.
Ольга19 вне форума Ответить с цитированием
Старый 02.05.2010, 17:09   #6
Александриус
Новичок
Джуниор
 
Аватар для Александриус
 
Регистрация: 02.05.2010
Сообщений: 20
По умолчанию

Ольга19, скорее всего вам необходимо создать свою новую тему..
Для изучения языка гораздо важнее свободная любознательность, чем грозная необходимость.
Александриус вне форума Ответить с цитированием
Старый 10.05.2010, 13:51   #7
Ольга19
 
Регистрация: 02.05.2010
Сообщений: 3
По умолчанию

Спасибо попробую
Ольга19 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Сортировка массива Никита35 Помощь студентам 12 24.10.2012 20:13
узнать время работы отдельного участка программы H'orn Общие вопросы .NET 7 10.03.2010 10:10
Паскаль. Сортировка массива Asira Помощь студентам 2 04.03.2010 16:54
Паскаль, сортировка массива! vlad1991 Паскаль, Turbo Pascal, PascalABC.NET 3 13.01.2009 22:57
Копирование участка текста из Экселя в Ворд Devourer12345 Microsoft Office Excel 3 30.07.2008 08:13