Народ, Помогите, ЗА СЕКСО

DELETED
3/29/2008, 1:49:18 PM
А на си можно? :)
-=Велла=-
3/29/2008, 9:28:48 PM
(vano-m @ 29.03.2008 - время: 08:35) Двумерные массивы (сортировка и перестановка) :)
Давай задание и методичку.... И на когда... Задание давай сюда в тему, мож все вместе напишем чего )))
JeyLo, наверное, низзя... Бо до Си еще не дошли :)
Как только все лабы на Паскале переделаем, будешь на С писать lol.gif
DELETED
3/31/2008, 1:32:12 AM
Лабораторная №5. Работп с двумерными массивами. Сортировки и перестановки в массиве.

Задание

Составить программу для работы с двумерным массивом заданного типа, но с произвольными размерами (по колличеству строк и столбцов) в пределах отведенного под массив места. Заполнить массив данными из имеющегося текстового файла, распечатать исзодный массив в выводной текстовый файл. Провести обработку массива в соответствии с заданием, результаты работы вывести в тот же выводной файл.

Вариант №29

Заполнить двумерный массив А (Мх2) элементов числами из текстового файла. Распечатать массив А. Далее каждый столбец массива А упорядочить по возрастанию обменом, затем заполнить по возрастанию одномерный массив В (длинной 2М элементов) методом слияния из обоих столбцов массива А. Оба массива распечатать после сортировок.

Предельное значение числа строк 11. Тип данных - целые.

ДАлее отсканированная методичка)
с описанием и разбором подобного варианта.

Получить код этого сета
imageimageimageimageimage
image
-=Велла=-
3/31/2008, 1:39:44 PM
На когда? Тут надо время на осмысление (ну и еще, чтоб дети мои спали хорошо) lol.gif
do-do
3/31/2008, 2:29:26 PM
"обменом" то бишь метод пузырька ?
mvf23
3/31/2008, 6:01:42 PM
(do-do @ 31.03.2008 - время: 09:29) "обменом" то бишь метод пузырька ?
угу. глянь на 3-ей странице скана.
DELETED
3/31/2008, 11:27:28 PM
(-=Велла=- @ 31.03.2008 - время: 08:39) На когда? Тут надо время на осмысление (ну и еще, чтоб дети мои спали хорошо) lol.gif
ну неделя есть вобщем.

щас в срочном порядке делаю лабы по физике атмосферы. в субботу пойду инфу здавать)))
-=Велла=-
4/1/2008, 2:21:07 AM
засада... я сортировку не умею... еще в универе что-то не пошло... ((((((( соррьки....
DELETED
4/1/2008, 2:26:30 AM
CODE for i := n - 1 downto 1 do
   for j := 1 to i do
       if a[j] > a[j+1] then
       begin
           t := a[j];
           a[j] := a[j+1];
           a[j+1] := t;
       end;
mvf23
4/1/2008, 6:53:55 AM
(JeyLo @ 31.03.2008 - время: 22:26)
Гм... Ты же вроде не пишешь на паскале? :) Али стырил откуда-нить? :)

Вообще очень аккуратный и лаконичный вариант пузырька, смотреть приятно. Аккуратный пузырек - весчь редкая, бо начинающие порой умудряются нагородить огородов даже на пузырьке, а продвинутые пузырек не юзают (ну разве что под страшными пытками) :)

-=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
DELETED
4/2/2008, 4:11:33 AM
Так алгоритм банальнейший. :)

А продвинутые orderы всякие используют, бо данные все уже давно с баз данных идут. А контролы сами сортируют. :)
-=Велла=-
4/2/2008, 2:01:21 PM
(mvf23 @ 01.04.2008 - время: 03:53) -=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
Я еще методичку даже прочесть не успела )))))
Ну вы пишите там по заданию сортировки, а я тогда ужо красиво все в файлы оформлю, ввод-вывод rolleyes.gif
DELETED
4/3/2008, 3:14:52 AM
(-=Велла=- @ 02.04.2008 - время: 10:01) (mvf23 @ 01.04.2008 - время: 03:53) -=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
Я еще методичку даже прочесть не успела )))))
Ну вы пишите там по заданию сортировки, а я тогда ужо красиво все в файлы оформлю, ввод-вывод rolleyes.gif
напиши пожалуйсто про сортировку. до нее я сам дошел. и сортировку не смог.
DELETED
4/3/2008, 3:18:23 AM
(-=Велла=- @ 31.03.2008 - время: 22:21) засада... я сортировку не умею... еще в универе что-то не пошло... ((((((( соррьки....
А "Программирование интерационных формул для расчета функций"?
do-do
4/3/2008, 2:31:15 PM
Усе! Совет - используя дебагер прогони код - тогда осознаешь (!!) как всплывает пузырек

CODE
(***************************[sxn.io]*******************************)
(*                                                                     *)
(*  File   : Buble-Gum.pas                                             *)
(*  Created: 01/04/2008                                                *)
(*  Reason : работа с двумерными массивами (лаб. работа N 5)           *)
(*  Product: сортировка и перестановка в массиве                       *)
(*  Author : do-do                                                     *)
(*  Purpose: сортировка двумерного массива методом вставки             *)
(*           Данные (тип:integer) считываются из текстового файла      *)
(*           d:\lab1\dat1.txt                                          *)
(*           Данные в файле записаны в 2е колонки                      *)
(*           Программа выводит следующие кода завершения               *)
(*           128 - файл с данными отсутсвует                           *)
(*           129 - элемент массива не целый                            *)
(*           n   - здесь n-1 числ успешно считанных строк     массива  *)
(*                 ДО возникновения ошибки                             *)
(*           0   - нормальное завершение программы                     *)
(***************************[sxn.io]*******************************)
program buble_gum;

const
M=11; (* размер массива *)
MyFileName='d:\lab1\datI.txt'; (* файл с тестовым массивом *)

Type
MyArray1= array[1..2*M] of integer;    (* рабочий одномерный массив *)
MyArray2= array[1..M,1..2] of integer; (* рабочий двумерный массив *)

VAR
B:MyArray1;
X:MyArray2;



procedure ListArray2 (var Y:MyArray2); (*процедура распечатки (в строчку) матрицы Y*)
   var j:byte;
begin
   Writeln;
   for j:=1 to M DO write('(',Y[j,1],':',Y[j,2],') ');
   Writeln;
end; (*ListArray2*)

procedure OpenMyFile; (*открыть файл, считать массив*)
var
f:text; (* задаем файл *)
i:byte;

begin
Assign(f,MyFileName);
{$I-}
(* выключили проверку ошибок ввода *)
Reset(f);

IF IOResult <> 0 then
begin writeln('File ', MyFileName, ' not found. Stop - 128'); halt(128); end
    else
begin
{$I+}
       for i:=1 to M do
                                   
  begin
IF SeekEOLn(f) then begin writeln('Error in READ. Stop [',i,']'); halt(i);end;
{$I-}
                       readln(f,X[i,1],X[i,2]);
IF IOResult <> 0 then
begin writeln('Error in array. Stop - 129 [',i,']'); halt(129); end
{$I+}
                       end
 end;
Close(f);
(*Инициализируем Одномерный массив - сливаем двумерный X в одномерный*)
For i:=1 to M DO Begin B[i]:=X[i,1];B[i+M]:=X[i,2];End;
Writeln('ListArray. Step 1');
ListArray2(X);
end; (* OpenMyFile *)



   
procedure Bubble2(L:byte;comment:string); (* сортируем столбик L глобального массива X *)
  var i,j : byte;
      t:integer;
begin
(*Тело подпрограммы сортировки - берем НАМ известную *)
for i:=M-1 downto 1 do
   for j:= 1 to i do IF X[j,L] > X[j+1,L] then
begin t:=X[j,L]; X[j,L]:=X[j+1,L]; X[j+1,L]:=t; end;
   Writeln(comment);
   ListArray2(X); (*Выводим отсортированный столбик, другой нас мало интересует*)
end;(* Bubble2 *)


procedure Bubble1; (* сортируем одномерный  массив B *)

var i,j:byte;
   t:integer;

begin

Writeln('Not Sorting array ');
For i:=1 to 2*M do write (B[i]:8);
Writeln;
(* Используем известную нам процедуру сортировки *)
for i:=M-1 downto 1 do
   for j:= 1 to i do IF B[j] > B[j+1] then
begin t:=B[j]; B[j]:=B[j+1]; B[j+1]:=t; end;
Writeln('Sorting array ');
For i:=1 to 2*M do write(B[i]:8);
writeln;
end;(* Bubble1 *)


BEGIN    (*Тело программы*)
OpenMyFile;
Bubble2(1,'Sorting 1 Column');
Bubble2(2,'Sorting 2 Column');
Bubble1;
END.
mvf23
4/3/2008, 7:18:02 PM
(do-do @ 03.04.2008 - время: 10:31) Усе! Совет - используя дебагер прогони код - тогда осознаешь (!!) как всплывает пузырек

CODE
(***************************[sxn.io]*******************************)

если бы я был преподавателем по поводу этой программы я бы вынес такой вердикт:

1) самый главный косяк - не понято задание:
заполнить по возрастанию одномерный массив В (длинной 2М элементов) методом слияния из обоих столбцов массива А.
Метод слияния - это когда из двух и более упорядоченных последовательностей собирают одну. Гугли, или читай методичку (Стр. 3. скана) Вывод: решена только половина задания. Оценка не выше "трёх"
2) использовано процедурное программирование... А мы его не изучали. Вывод: писал не сам. Значит будем оценивать того программиста, которой это написал в три раза строже...
3) за счет проверок корректности очень усложнены операции ввода-вывода. Этого не требовалось, мы этого не изучали. Вывод: писал не сам.
4) не совсем корректное использование процедурного программирования. Логически разные задачи выполняются в одной процедуре. Смысл процедур в их универсальности, в возможности их многократного использования. Если я попытаюсь отсортировать массив, используя указанные процедуры - то мне обязательно придется выводить какие-то данные на экран. Если я захочу считать файл, то мне придется задать его имя константой, задать два массива с определенными именами и т.п. Вывод: процедурное программирования использовано неверно.
5) каментоф много, но форматирование кода "хромает". 3 оператора в одной строке - явный перебор. Плюс помесь CamelCase, AllCaps и всех маленьких букв, хоть это и паскаль, но хороший программист должен придерживаться одного стиля...

Вывод: низачод. На пересдачу.
do-do
4/3/2008, 7:46:22 PM
На пересдачу
Как грится НАХ. Делал на коленке, больше времени ушло на шапку.

Если надо СЛИТЬ 2а упорядоченных массива в один B - сливаешь после выполнения 2ой процедуры сортировки (оба столбца УЖЕ отсортированы) всего то...Т.е. делаешь процедуру Swap2Array - например, и применяешь (массив то глобальный) после 2х предыдущих сортировок.
К божескому виду пусть соискатель приводит.... я вообще хотел все через любимые динамические массивы сделать.... (универсально в высшей степени), но судя по первой лабе... им этого не нужно :)

Методички пущай студенты читают - оно полезнее, я ток первый лист глянул, как оформлять лабу :)
Главное робит прожка, простые ошибки ловит. Кому надо, думаю трансформирует (а лучше напишет новую) по своему вкусу (кстати, в этом случае процедуры очень полезны)

P.S. Методически правильнее эту задачу решать с помощью ObjectPascal (его расширения в Pascal 7) Тут заводим метод, сортировка одномерного массива, сортировка многомерного.... и проч. понятнее было бы по любому
mvf23
4/3/2008, 8:43:52 PM
(do-do @ 03.04.2008 - время: 15:46) Тут заводим метод, сортировка одномерного массива, сортировка многомерного.... и проч. понятнее было бы по любому
Да ну... Имхо, все это "от лукавого": имхо линейный, процедурный или объектый стиль программирования - это вовсе не главное, в такой задаче... Главное - это сортировкам научить.

Дональд Кнут считаейтся одним из наиболее выдающихся программистов 20го века, просто потому что он алгоритмы правильные знает и умеет придумывать. При этом я совсем не уверен - знаком ли он со всеми премудростями объектного программирования.

Думаю если бы тебя сразу вгрузили классами, шаблонами, инкасуляциями, сложными наследованиями, друзьями класса, абстрактными методами, публичными и приватными членами класса и прочими премудростями объектного программирования - то напрочь бы отбили все желание программировать :) Так что МЕТОДИЧЕСКИ, с точки зрения методики преподавания - все правильно.

Так что всему свое время. Для меня например нет никакой разницы - написать такую программу с использованием средств объектного программирования или без него, она же простенькая совсем. Городить тут классы, процедуры и т.п. имхо только код удлинять :) А использовать тут динамические массивы - вообще изврат. 50% кода будет посвящено обслуживанию динамических массивов. Работать будет медленнее, да и вообще непонятно зачем оно нужно, если максимальный размер массива - 11 элементов. :)
do-do
4/3/2008, 11:50:31 PM
(mvf23 @ 03.04.2008 - время: 16:43) Работать будет медленнее, да и вообще непонятно зачем оно нужно, если максимальный размер массива - 11 элементов. :)
Когда я вкурил Объектный Паскаль - а это было, ну шоб не соврать совсем году так в 92-93 (тогда еще Борланд распродавала за смешные бабки дистрибутивы семерки) МНЕ ОН ОДНОЗНАЧНО был понятнее, чем просто линейный. Но паскаль я много лет уж не пользую - пришлось вспомнить :) Хотя конечно, шоб зачет получить - делать надо проще и быстрее (а чего быстрее списать уже готовую прогу :) )


Я бы челу не Кнута советовал почитать (будет он с mix разбираться :)? ) а книжку Жемчужины программирования. Джон Бентли
Там и сортировка есть и оптимизация :)
mvf23
4/3/2008, 11:55:00 PM
Ну ладно уж, так и быть... Потратил 25 минут личного времени. Чтобы преподаватель(ница) был(а) довольна за основу взял пример из методички.

Вообще оценивая строго я бы за этот пример из методички "пятерку" бы не поставил. В частности можешь передать своему преподавателю, что использование меток и операторов GOTO - дурной тон. Хотя лучше не стоит, а то ещё расстроится :) Короче преподаватель всегда прав, так что пусть наслаждается...

CODE program SortNum;
{ Программа Лабораторной работы №5 Вариант №29. vano-m, студент группы sxn.io
 Выполнена под чутким руководством Веллы, do-do, mvf и JeyLo. }

var
 A : array [1..11,1..2] of integer;
 B : array [1..22] of integer;
 M,i,j,t,ic,kc : integer;
 Fin, Fout : text;

label
 Vvod_M;
begin
{ Открытие входного и выходного файлов  }
assign(Fout, 'UMNIK5.RES');
rewrite(Fout);
assign(Fin,'D:\LAB1\DATI.TXT');
reset(Fin);

{ Ввод количества строк массива }
Vvod_M:
writeln('Введите число строк массива');
readln(M);
if  (M < 2) or (M > 11) then
begin
   writeln('Недопустимое значение!');
   goto Vvod_M;
end;

{ заполнение массива числами из файла  }
for i := 1 to M do
   for j := 1 to 2 do read(Fin,A[i,j]);

{ Закрытие входного файла  }
close (Fin);

{ Распечатка исходного массива }
writeln(Fout,'Исходный массив A из ',M,'x2 элементов');

for i := 1 to M do
begin
   for j:=1 to 2 do write(Fout, A[i,j]:6);  { печать текущей строки }
   writeln(Fout);
end;
writeln(Fout);

{ сортировка столбцов A "пузырьком". }
{ Поскольку столбцы одинакового размера - сортируем оба столбца за один "проход" }

 for i := M-1 downto 1 do
  for j := 1 to i do
  begin
     if a[j,1] > a[j+1,1] then {первый столбец}
     begin
        t := a[j,1];
        a[j,1] := a[j+1,1];
        a[j+1,1] := t;
     end;
     if a[j,2] > a[j+1,2] then     {второй столбец}
     begin
        t := a[j,2];
        a[j,2] := a[j+1,2];
        a[j+1,2] := t;
     end;
  end;

{теперь сливаем оба столбца в массив B}
ic := 1;
kc := 1;
for i := 1 to 2*M do
  if ic > M then
   begin
      B[i] := A[kc,2];
      kc := kc + 1;
   end
  else
  if kc > M then
   begin
      B[i] := A[ic,1];
      ic := ic + 1;
   end
  else
  if A[ic,1] < A[kc,2] then
    begin
      B[i] := A[ic,1];
      ic := ic + 1;
    end
  else
    begin
      B[i] := A[kc,2];
      kc := kc + 1;
    end;

{ Печать результатов }
writeln(Fout, '=== Результаты работы ===');
writeln(Fout,'Массив A, каждый столбец которого отсортирован обменом');
for i := 1 to M do
begin
   for j:=1 to 2 do write(Fout, A[i,j]:6);  { печать текущей строки }
   writeln(Fout);
end;
writeln(Fout);

writeln(Fout,'Упорядоченный массив B, полученный слиянием из столбцов массива A ');
for i := 1 to 2*M do write(Fout, B[i]:4);  

close(Fout);
end.