Угу-угу... Кстати - попробуй всё же разобраться как оно работает, чтоб тебе польза была не только для зачетки, но и для общего развития... :)
Будут вопросы - задавай, не стесняйся, а то тут "матерые программисты" вместо того, чтоб объяснять по-человечески, какие-то эзотерические споры ведут от безделья :)
спасибо. да я впринципе с 1 по 4 лабу как текст увидел, так сразу и суть и алгоритм понял. пятую еще пока пытаюсь понять, до перестановок уже все въехал. до конца семестра остались две лабы... потом экзамен. ээх. уже начал готовится...
vano-m
Уррра! пятая лаба здана! осталось написать подпрограммы.
ВСЕМ огромное спасибо!
vano-m
Народ. Понимаю, конечно, что достал тут уже всех. Но мну застопорился на последней лабе. Из зп чего не дают написать курсовую. Помогите в последний разок , а?
do-do
QUOTE
Но мну застопорился на последней лабе
Ты как царь горы понимаешь шо написал, для тех кто в танке разжуй Ху из Что
P.S. Кого достал, те не ответят - так шо брось, чай не институтка. Сермягу излагай
vano-m
Вобщем тут такое дело...
Прочитать в одномерный массив строк (длинной по 74 символа) первые 73 символа каждой строк файла DATF.TXT (файл на серваке в универе). Используя функцию, заполнить выходной одномерный массив (элементы - строки, длинной восемь символов) числами.
Процедуры 1) Составить строковую функцию, выбирающую из строки первое число - первую подстроку между пробелами, заменяя при выборе в исходной строке выбранные символы пробелами. 2) Аечать выходного массива по пять чисел в строке выполнить с помощю процедуры.
M<=10 М- кол-во строк
do-do
Ну так в чем затык то ?
Ты ведь можешь сравнивать в IF значение букв и если символ больше 9 или меньше 0 то это не число...дальше находишь первую позицию числа и в цикле ищешь пробел (или букву?)
vano-m
QUOTE (do-do @ 26.04.2008 - время: 19:21)
Ну так в чем затык то ?
Ты ведь можешь сравнивать в IF значение букв и если символ больше 9 или меньше 0 то это не число...дальше находишь первую позицию числа и в цикле ищешь пробел (или букву?)
я ваще не знаю как это написать!.... :'((((((((
vano-m
походу попу рвать придеца на этой инфе... тока как бы это так побезболезненей зделсть...
do-do
Вот очередная мастурбация моего разума
CODE
(***************************[sexnarod.ru]*******************************) (* *) (* File : Number-str.pas *) (* Created: 01/05/2008 *) (* Reason : работа со строковыми массивами *) (* Product: нахождение числа в подстроке *) (* Author : do-do *) (* Purpose: Прочитать в одномерный массив строк длинной по 74 символа *) (* первые 73 символа каждой строк файла DATF.TXT . *) (* Используя функцию, заполнить выходной одномерный массив *) (* (элементы - строки, длинной восемь символов) числами. *) (* Процедуры/Функции *) (* All_Str - функция, выбирает из строки первое число - *) (* первую подстроку между пробелами, заменяя при выборе в *) (* исходной строке выбранные символы пробелами. *) (* prn_str- процедура печати выходного массива по пять чисел в строке*) (* Проверки на ошибки ввода/вывода не производится *) (* *) (* Все числа считаются ЦЕЛЫМИ не ОТРИЦАТЕЛЬНЫМИ!!! *) (***************************[sexnarod.ru]*******************************) program number_str;
const M=10; (* максимальный размер массива *) MyFileName='datF.txt'; (* файл с тестовым массивом *)
Var N:1..M; (* Число строк которые нужно считать *) s: array [1..M] of element; s1: array [1..M] of string8; f:text;
procedure init; (* инициализация программы *) Var i:1..M; begin (* обнуление рабочего массива *) For i:=1 to M DO begin s[i].st:=''; s[i].pos1:=0; s[i].pos2:=0; s[i].num:=0;s[i].len:=0;s1[i]:=''; end; writeln; write('N=');readln(N); (* вводим число считываемых строк *) Assign(f,MyFileName); Reset(f); For i:=1 to N do BEGIN Readln(f,s[i].st); s[i].len:=length(s[i].st); (*длина текущей строки *) END; Close(f); end; (* end init *)
function This_num(q:string74):boolean; (*True если цифра*) begin This_num:= (q >= '0') AND (q <= '9');
end;
procedure All_Str; (* основная процедура *) var i:1..M; j,l:Num74; stop:boolean; Code: integer; function Num_pos(j:Num74;var y:element):boolean; (*True - если в позиции строки y.str c j число. Тогда в y.pos1 и y.pos2 заносим *) (* начальную и конечную позицию этого числа *) (* y.len - уже находится размер строки y.str *) Var Flag,quit:boolean; i:Num74;
begin Flag:=False; i:=j; IF j > 1 then begin IF y.st[j-1] = ' ' then Flag:=True end Else Flag:=True; (*начало строки, там то же может быть число*) IF Flag then begin quit:=True; while (j < y.len) and quit DO begin Inc(j); IF Not This_num(y.st[j]) then begin IF y.st[j] =' 'then begin Flag:=True; quit:=False; y.pos1:=i; y.pos2:=j-1; end; end; end; IF quit and (j=y.len) then begin Flag:=True;y.pos1:=i;y.pos2:=j; end; end;
Num_pos:=Flag;
end; (*end Num_pos *)
begin (* start All_Str *)
for i:=1 TO N DO begin j:=0; stop:=False; while (j <= s[i].len) AND Not stop DO
begin INC(j); IF This_num(s[i].st[j]) then stop:=Num_pos(j,s[i]);
end; IF stop then begin
s1[i]:=Copy(s[i].st,s[i].pos1,s[i].pos2-s[i].pos1+1); Val(s1[i],s[i].num,Code); IF Code <> 0 Then begin Writeln('Ошибка преобразования',i);halt(128) end; For l:=s[i].pos1 to s[i].pos2 do s[i].st[l]:=' '; (*пробелы*) end; end;
end; (* end All_Str *)
procedure prn_str; var i:1..M; begin
Writeln('Number printing'); For i:=1 to N DO IF s1[i] <> '' then Write(s1[i]:16); WriteLn; Writeln('END'); (*На стандартной консоли (шириной 80 символов) будет 5 чисел в колонке*) Writeln; Writeln('String!!!!'); For i:=1 to N do writeln(s[i].st); end;
BEGIN (* main programm *) Init; All_Str; prn_str;
END. (* main programm *)
Это сообщение отредактировал do-do - 01-05-2008 - 17:49
vano-m
Ну додо, ну дружище! НУ ВЫРУЧИЛ! ОГРОМНОЕ СПАСИБО!
попробую сдаться отпишусь как прошло.
ведь не перевелись же еще добрые люди)))))))))))
do-do
В логике алгоритма разберись :) Числом считается не только подряд стоящие цифры между пробелами, но и если цифрами начинается строка (потом пробел) и пробел цифры конец строки.
При выводе печатаются исходные строки УЖЕ со вставленными пробелами.......
vano-m
а что такое flag?
do-do
flag он и в африке флаг. Просто переменная булева (логическая) если принимает значение TRUE то последовательность символов в строке с ТАКОЙ то позиции является числом (т.е. окружена пробелами...или с одной стороны начало строки конец пробел..или пробел конец строки)
vano-m
выдает несовместимость типов. и говорит что ошибка в выражении.
IF Not This_num(y.st[j]) then begin IF y.st[j] =' 'then begin Flag:=True; quit:=False; y.pos1:=i; y.pos2:=j-1; end; end; end; IF quit and (j=y.len) then begin Flag:=True;y.pos1:=i;y.pos2:=j; end; end;
do-do
Все нормально там.... на 2х компиляторах проверил Может списал как то не так..вот тут архив с исходниками, exe и пример data файла. Усе работает.
Народ, а ктонить умеет решаь интегралы? Или может есть какая прога для их решения?
doodge
Люди добрые помогите пож-та
CODE
Найти максимум из всех элементов, тех строк из заданной матрицы, которые упорядочены (либо по возрастанию, либо по убыванию)
И сколько хотите за решение? сорри за наглость но нужно срочно
Это сообщение отредактировал doodge - 21-06-2009 - 09:04
JeyLo
Язык?
doodge
QUOTE (JeyLo @ 22.06.2009 - время: 13:59)
Язык?
ой совсем забыл уточнить - Паскаль
Алексеев
Легко. Смотрим:
CODE
program proga; {$R-} {Выключаем проверку границ массива. Потом описываем саму матрицу в виде динамического массива:}
type PLine = ^line; { Описываем строку динамической матрицы } line = array [1..1] of byte; PMatrix = ^arr; {Описываем саму матрицу как массив указателей на строки} arr = array[1..1] of PLine;
var i,j,k,rand,buf: byte; {Это вспомогательные переменные} a,b: byte; {Переменные размерности массива} detect: boolean; {Переменная для определения упорядоченности} Matrix: PMatrix; {Указатель на матрицу}
procedure Form_Dynamic_Matrix; {процедура формирования матрицы} begin writeln('Vvedite chislo strok: '); read(a); {считываем число строк} writeln('Vvedite chislo stolbcov: '); read(b); {считываем число столбцов} GetMem(Matrix, a*sizeof(PLine)); {выделяем память под указатели на строки} for i:=1 to a do GetMem(Matrix^[i], b*sizeof(PLine)); {выделяем память для каждого из членов матрицы} writeln('Matrica slychainih chisel: '); for i:=1 to a do begin writeln; for j:=1 to b do begin matrix^[i]^[j]:=random(256); {Забиваем матрицу случайными байтовскими числами} write(matrix^[i]^[j],' '); {Выводим на экран} end; end; end;
procedure Clear_Matrix; {Очистка памяти. Вызывается в конце программы} begin for i:=1 to a do FreeMem(Matrix^[i], a*sizeof(Pline)); {чистим память для каждого из членов} FreeMem(Matrix, b*sizeof(PLine)); {чистим память для указателей на строки} end;
procedure Rand_Organized; {Упорядочиваем строки случайным образом} begin for k:=1 to a do {перебираем все строки} begin rand:=random(10); {случайное значение от 0 до 9} if rand > 6 then {если оно больше шести, упорядочиваем по возрастанию стандартным способом} begin for i:=1 to b-1 do for j:=1 to b-i do if (Matrix^[k]^[j] > Matrix^[k]^[j+1]) then begin buf:=Matrix^[k]^[j]; Matrix^[k]^[j]:=Matrix^[k]^[j+1]; Matrix^[k]^[j+1]:=buf; end; end else if rand > 3 then {если от шести до трех, упорядочиваем по убыванию тем же способом} begin for i:=1 to b-1 do for j:=1 to b-i do if (Matrix^[k]^[j] < Matrix^[k]^[j+1]) then begin buf:=Matrix^[k]^[j]; Matrix^[k]^[j]:=Matrix^[k]^[j+1]; Matrix^[k]^[j+1]:=buf; end; end; end; {если три или меньше, не делаем ничего} writeln; writeln; writeln('Otsortirovannaya Matrica: '); {выводим на экран} for i:=1 to a do begin writeln; for j:=1 to b do write(matrix^[i]^[j],' '); end; end;
procedure Detected; {Ищем отсортированные строки} begin writeln; writeln; writeln('Analiziryem...'); for k:=1 to a do {пробегаемся по всем строкам} begin detect:=true; {переменная-детекотор} {Сначала смотрим на предмет возрастания} for i:=1 to b-1 do if matrix^[k]^[i]>matrix^[k]^[i+1] then detect:=false; {если хоть одно значение в строке меньше предыдущего, detect=false. Иначе выводим результат.} if detect=true then writeln('Stroka ',k,' uporyadochena po vozrastaniu. Max = ',matrix^[k]^[b]) else {потом так же смотрим на убывание} begin detect:=true; for i:=1 to b-1 do if matrix^[k]^[i]<matrix^[k]^[i+1] then detect:=false; if detect=true then writeln('Stroka ',k,' uporyadochena po ubivaniyu. Max = ',matrix^[k]^[1]); end; end; end;
begin {Сама прога} randomize; {генератор случайных чисел, чтобы значения не повторялись} writeln; Form_Dynamic_Matrix; {формируем матрицу} Rand_Organized; {Сортируем матрицу} Detected; {Ищем упорядоченные строки} Clear_Matrix; {Чистим память после использования} readln; readln; end.
Процедуры writeln и readln добавлены для удобночитаемости результатов :) Если что, исходник и экзешник лежат тут: .
П.С. Сексов нафиг не надо. Но если совесть таки будет мучать, можно подарить что-нить симпатичное... ну скажем Велле :)
П.П.С. На Паскале не кодил уже года три-четыре, поэтому за индусские выкладки тапками не кидайтесь.
П.П.П.С. Передаю привет уважаемому начальству за очередной продуктивный субботний день