Свободен |
05-04-2008 - 22:41
QUOTE (mvf23 @ 04.04.2008 - время: 13:46) | Угу-угу... Кстати - попробуй всё же разобраться как оно работает, чтоб тебе польза была не только для зачетки, но и для общего развития... :)
Будут вопросы - задавай, не стесняйся, а то тут "матерые программисты" вместо того, чтоб объяснять по-человечески, какие-то эзотерические споры ведут от безделья :) |
спасибо. да я впринципе с 1 по 4 лабу как текст увидел, так сразу и суть и алгоритм понял. пятую еще пока пытаюсь понять, до перестановок уже все въехал. до конца семестра остались две лабы... потом экзамен. ээх. уже начал готовится... |
Свободен |
09-04-2008 - 19:57 Уррра! пятая лаба здана! осталось написать подпрограммы.
ВСЕМ огромное спасибо! |
Свободен |
25-04-2008 - 18:38 Народ. Понимаю, конечно, что достал тут уже всех. Но мну застопорился на последней лабе. Из зп чего не дают написать курсовую. Помогите в последний разок , а? |
do-do Свободен |
25-04-2008 - 20:00 QUOTE | Но мну застопорился на последней лабе |
Ты как царь горы понимаешь шо написал, для тех кто в танке разжуй Ху из Что
P.S. Кого достал, те не ответят - так шо брось, чай не институтка. Сермягу излагай
|
Свободен |
26-04-2008 - 17:57 Вобщем тут такое дело...
Прочитать в одномерный массив строк (длинной по 74 символа) первые 73 символа каждой строк файла DATF.TXT (файл на серваке в универе). Используя функцию, заполнить выходной одномерный массив (элементы - строки, длинной восемь символов) числами.
Процедуры 1) Составить строковую функцию, выбирающую из строки первое число - первую подстроку между пробелами, заменяя при выборе в исходной строке выбранные символы пробелами. 2) Аечать выходного массива по пять чисел в строке выполнить с помощю процедуры.
M<=10 М- кол-во строк |
do-do Свободен |
26-04-2008 - 19:21 Ну так в чем затык то ?
Ты ведь можешь сравнивать в IF значение букв и если символ больше 9 или меньше 0 то это не число...дальше находишь первую позицию числа и в цикле ищешь пробел (или букву?) |
Свободен |
26-04-2008 - 21:36
QUOTE (do-do @ 26.04.2008 - время: 19:21) | Ну так в чем затык то ?
Ты ведь можешь сравнивать в IF значение букв и если символ больше 9 или меньше 0 то это не число...дальше находишь первую позицию числа и в цикле ищешь пробел (или букву?) |
я ваще не знаю как это написать!.... :'(((((((( |
Свободен |
30-04-2008 - 22:21 походу попу рвать придеца на этой инфе... тока как бы это так побезболезненей зделсть... |
do-do Свободен |
01-05-2008 - 17:47 Вот очередная мастурбация моего разума
CODE | (***************************[sxn.today]*******************************) (* *) (* File : Number-str.pas *) (* Created: 01/05/2008 *) (* Reason : работа со строковыми массивами *) (* Product: нахождение числа в подстроке *) (* Author : do-do *) (* Purpose: Прочитать в одномерный массив строк длинной по 74 символа *) (* первые 73 символа каждой строк файла DATF.TXT . *) (* Используя функцию, заполнить выходной одномерный массив *) (* (элементы - строки, длинной восемь символов) числами. *) (* Процедуры/Функции *) (* All_Str - функция, выбирает из строки первое число - *) (* первую подстроку между пробелами, заменяя при выборе в *) (* исходной строке выбранные символы пробелами. *) (* prn_str- процедура печати выходного массива по пять чисел в строке*) (* Проверки на ошибки ввода/вывода не производится *) (* *) (* Все числа считаются ЦЕЛЫМИ не ОТРИЦАТЕЛЬНЫМИ!!! *) (***************************[sxn.today]*******************************) program number_str;
const M=10; (* максимальный размер массива *) MyFileName='datF.txt'; (* файл с тестовым массивом *)
Type string74=string[74]; string8 =string[8]; Num74=0..74; element=record st:string74; pos1,pos2:Num74; num:integer; Len:Num74; end;
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 |
Свободен |
03-05-2008 - 22:06 Ну додо, ну дружище! НУ ВЫРУЧИЛ! ОГРОМНОЕ СПАСИБО!
попробую сдаться отпишусь как прошло.
ведь не перевелись же еще добрые люди))))))))))) |
do-do Свободен |
04-05-2008 - 11:09 В логике алгоритма разберись :) Числом считается не только подряд стоящие цифры между пробелами, но и если цифрами начинается строка (потом пробел) и пробел цифры конец строки.
При выводе печатаются исходные строки УЖЕ со вставленными пробелами....... |
Свободен |
05-05-2008 - 09:35 а что такое flag? |
do-do Свободен |
05-05-2008 - 12:42 flag он и в африке флаг. Просто переменная булева (логическая) если принимает значение TRUE то последовательность символов в строке с ТАКОЙ то позиции является числом (т.е. окружена пробелами...или с одной стороны начало строки конец пробел..или пробел конец строки) |
Свободен |
09-05-2008 - 21:06 выдает несовместимость типов. и говорит что ошибка в выражении.
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 Свободен |
10-05-2008 - 11:49 Все нормально там.... на 2х компиляторах проверил Может списал как то не так..вот тут архив с исходниками, exe и пример data файла. Усе работает.
http://slil.ru/25773961
|
Свободен |
16-05-2008 - 20:38 Нашкрябал к 5 и 7 лебе блок схепы. Писец какие страшные получились. сам путаюсь.
|
Свободен |
16-05-2008 - 20:39 мало ли если интересно 7 лаба. блок схема.
|
Свободен |
25-05-2008 - 16:49 Народ, а ктонить умеет решаь интегралы? Или может есть какая прога для их решения? |
doodge Свободен |
21-06-2009 - 09:03 Люди добрые помогите пож-та
CODE | Найти максимум из всех элементов, тех строк из заданной матрицы, которые упорядочены (либо по возрастанию, либо по убыванию) |
И сколько хотите за решение? сорри за наглость но нужно срочно Это сообщение отредактировал doodge - 21-06-2009 - 09:04 |
Свободен |
22-06-2009 - 10:59 Язык? |
doodge Свободен |
25-06-2009 - 17:00
QUOTE (JeyLo @ 22.06.2009 - время: 13:59) | Язык? |
ой совсем забыл уточнить - Паскаль |
Алексеев Свободен |
27-06-2009 - 17:05 Легко. Смотрим:
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 добавлены для удобночитаемости результатов :) Если что, исходник и экзешник лежат тут: . П.С. Сексов нафиг не надо. Но если совесть таки будет мучать, можно подарить что-нить симпатичное... ну скажем Велле :) П.П.С. На Паскале не кодил уже года три-четыре, поэтому за индусские выкладки тапками не кидайтесь. П.П.П.С. Передаю привет уважаемому начальству за очередной продуктивный субботний день |