|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.03.2010, 19:47 | #1 |
Пользователь
Регистрация: 17.01.2010
Сообщений: 14
|
Паскаль выделение участка массива
Добрый вечер. Нужна помощь в написании программы на паскале.
Задача состоит в том, чтобы написать программу, которая из исходного массива ( максимум 10 эл-тов ) вытаскивает кусок, который заключен между элементами нулями и создает новый массив. ( т.е. например массив исходный: 1 2 5 0 8 5 4 0 3 0 - требуемый массив - 8 5 4 ) Нули берутся только 1-ый и 2-ой. Я не могу написать "счетчик" кол-ва элементов между этими самыми нулями. Вот что у меня получилось: PHP код:
b - массив, который - результат. n1 и n2 - переменные - которым присваиваю 1 и 2 нули из массива а. k - счетчик нулей. |
25.03.2010, 19:52 | #2 |
Форумчанин
Регистрация: 16.02.2010
Сообщений: 316
|
Код:
|
25.03.2010, 20:22 | #3 |
Пользователь
Регистрация: 17.01.2010
Сообщений: 14
|
А что тут С и что тут К?
|
02.05.2010, 16:09 | #4 |
Регистрация: 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. Спасибо |
02.05.2010, 16:13 | #5 |
Регистрация: 02.05.2010
Сообщений: 3
|
я запускаю тестирующую, а там все кроме сортировки работает(
Вообще требования такие: 1. Данные хранятся в виде объекта класса «матрица». Внутри класса данные хранятся в виде двумерного динамического массива, организованного в виде столбца указателей на строки или строки указателей на столбцы – в зависимости от алгоритма сортировки (за основу можно взять реализацию класса с семинарского занятия № 1). Класс должен быть описан в отдельном модуле и может использовать фатальную обработку ошибок. 2. Алгоритм сортировки оформлен в виде подпрограммы, свободной от операций ввода-вывода. Эта подпрограмма может быть реализована как метод класса, как дружественная функция или независимо. Параметры подпрограммы: указатель на объект (если не метод класса), функция, сравнивающая строки (столбцы) на упорядоченность (если невозможна сортировка по ключам). Подпрограмма адекватно реагирует на неверные входные данные и возвращает код завершения, если она не метод класса, или вызывает обработчик ошибок класса в противном случае. 3. Фактические размеры матрицы при создании указываются пользователем. Заполнение матрицы осуществляется тремя способами (по выбору пользователя): с клавиатуры (с помощью редактора матриц), случайным образом и из типизированного или двоичного (но не текстового!) файла с проверкой корректности его имени и содержимого (способ упаковки матрицы в файл такой же, как в задании № 3 в 1-м семестре). 4. Подпрограмма-редактор должна содержать минимальный набор операций (перемещение по матрице с помощью стрелок, редактирование элемента матрицы с проверкой правильности введенного числа, выход), внизу экрана должна быть строка состояния, которая содержит информацию о текущем элементе матрицы (его индексы в матрице и полное значение в научном формате), и подсказка по используемым клавишам. Вызов алгоритма сортировки в число функций редактора включать не следует! Редактор может быть написан не самостоятельно, но в его работе надо хорошо разбираться (при этом имеется в виду редактор, удовлетворяющий минимальным требованиям). Ввод любых данных с клавиатуры не должен вызывать аварийного завершения работы программы. 5. Работа тестирующей программы организована в виде простейшего меню, позволяющего создавать таблицу, выполнять ее сортировку, показывать результат (вызов редактора), сохранять текущую матрицу в файле и заканчивать работу. При создании новой матрицы старая уничтожается (с запросом на сохранение в файле), т.е. в каждый момент времени в памяти находится не более одного объекта. 6. Любые необратимые действия с матрицей должны выполняться только после запроса на подтверждение. 7. При сдаче программы преподавателю следут приготовить несколько тестовых примеров с матрицами небольшого размера, хранящимися в файлах, на которых легко проверить правильность работы алгоритма сортировки. |
02.05.2010, 17:09 | #6 |
Новичок
Джуниор
Регистрация: 02.05.2010
Сообщений: 20
|
Ольга19, скорее всего вам необходимо создать свою новую тему..
Для изучения языка гораздо важнее свободная любознательность, чем грозная необходимость.
|
10.05.2010, 13:51 | #7 |
Регистрация: 02.05.2010
Сообщений: 3
|
Спасибо попробую
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль.Сортировка массива | Никита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 |