Убедительная просьба ко всем, кто выкладывает исходники: 1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы
Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!
Прежде чем задать вопрос, воспользуйтесь учебником
Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
overover
Цитата:
Таких ламерских вопросов тут еще, видимо, не задавали Smile, но все же: есть исходник в виде PAS (аж 40 строк Smile) 1995 года написания. Нужно его преобразовать в исполняемый файл. Откуда можно выкачать компилятор(?) поменьше размером?
P.S. Диска с Паскалем\Дельфи нет под рукой, да я и все равно не знаю, как ими пользоваться Smile
ctrl+F9
P.S. Это запуск проги, ну и EXE-шник тоже появиться.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Последний раз редактировалось Lord_of_Darkness 04.05.2006 23:04, всего редактировалось 1 раз.
Junior
Статус: Не в сети Регистрация: 15.08.2004 Откуда: Казахстан
Как считать массив с текстового файла в паскале
Например текстовой файл содержит инфу
4 2
42 54 77 85
4- кол-во чисел в массиве
2 ну это вам не нужно просто число
а 42 54 77 85 сам массив который как указано состоит из четырех числе
Ну начало я знаю:
read(f,n);
read(k,f); а массив как??? так не получается
read(f,massiv[n]);
Помогите пожалуйста
Member
Статус: Не в сети Регистрация: 01.05.2004 Откуда: VRN Фото: 97
Собственно я не понимаю что тут надо делать и как это изобразить в паскале.
С помощью решета Эратосфера найдите четверти меньше n простых чисел,принадлежащих одному десятку(например:11,13,17,19).
Решетом эратосфера называют следующий способ определения простых чисел.Вычислим подряд все целые числа,кратные 2,зачеркнем.первое из оставшихся чисел-3,подчеркнем его,а все числа,кратные трем зачеркнем.Первое число из оставшихся теперь 5,т.к. 4 уже зачеркнуто.Подчернем его как простое,а все большие числа кратные пяти,зачеркнем и т.д.
Member
Статус: Не в сети Регистрация: 21.10.2003 Откуда: Брест Фото: 47
Маловато для понимания... Ибо nэту байду я есди и знал, то уже давно забыл
Хотя опытным глазом вижу, что здесь совсем не сложно... Я бы сказал, что непонятки вносит фраза "четверти меньше n простых чисел". Что здесь означает четверти меньше n?
Добавлено спустя 10 минут, 50 секунд: Наверное надо найти четверти простых чисел, меньших n и принадлежащих одному десятку. По-моему так уже проще...
Добавлено спустя 7 минут, 2 секунды: В общем, могу в нескольких предложениях выдать приблизительный алгоритм решения , если я правильно понял постановку задачи...
Кстати скажи, по чем конкретно это тебе задали курсач и на каком курсе?
_________________ А ещё недавно ждали AMD Steamroller на AM3+
Junior
Статус: Не в сети Регистрация: 15.08.2004 Откуда: Казахстан
Дана задача
***********************************************
Будем рассматривать только строчки, состоящие из заглавных латинских букв. Например, рассмотрим строку AAAABCCCCCDDDD. Длина этой строки равна 14. Поскольку строка состоит только из латинских букв, повторяющиеся символы могут быть удалены и заменены числами, определяющими количество повторений. Таким образом, данная строка может быть представлена как 4AB5C4D. Длина такой строки 7. Описанный метод мы назовем упаковкой строки.
Напишите программу, которая берет упакованную строчку и восстанавливает по ней исходную строку.
Примеры
Как сделать??? Я тут попроюовал но кажись не правильно, подскажите пожалуйста.
Код:
var f:text; stroka,p,k,h:string; r,i,n,ch,l,errcode,err:integer; begin assign(f,'p.in'); reset(f); read(f,stroka); p:=''; h:=''; for i:=1 to length(stroka) do if stroka[i] in ['1'..'9'] then begin if stroka[i+1] in ['1'..'9'] then k:=stroka[i]+stroka[i+1]; val(k,l,err); for r:=1 to l do h:=h+stroka[i]; delete(stroka,l,2); insert(h,stroka,l); end else val(stroka[i],ch,errcode); for n:=1 to ch do p:=p+stroka[i]; delete(stroka,ch,1); insert(p,stroka,ch); close(f); writeln('otvet',stroka); ну тут запись в файл и так далее readln; end.
Member
Статус: Не в сети Регистрация: 08.12.2004 Откуда: Москва
Текст программы стоит разбить по логическим блокам, чтоб понятнее было.
Когжа будешь вставлять текст, помести его в тег
Код:
. Я допустил что перед одиночным сиволом стоят 1. То есть в 2) примере 22D7A1C18F1G1D Реализовать в точности как у тебя несложно, просто возиться не хочется, да потом, это не главное. Напишу свой вариант на псевдокоде, думаю в Паскаль перевести не так сложно.
Код:
Распаковка
Итак, файл открыт, строка s прочитана num : string; /*число символов*/ res : string; /*преобразованная строка*/ i : integer ; /*счётчик*/ ind : integer ; /*счётчик*/ i = 1; /*индексация в строке от 1*/ пока(i<длина(s)) ( /*лишние проверки на цифры делать можно, но надо ли?*/ если(s[i] в '0'..'9') ( num:=''; пока (s[i] в '0'..'9') ( num:= num + s[i]; /*сдвиг по строке*/ i:= i+1; ) ) /*из строки в число*/ len := число(num); //символ из алфавита? если(s[i] в 'A'..'Z') /*добавление в результат для ind от 1 до len делать ( res:=res+ s[i]; ) )/*конец цикла пока */ /*Запись строки res в файл.*/ /*Обнуление res*/
Упаковка Итак, файл опять же открыт :), строка s прочитана
res : string; /*преобразованная строка*/ i : integer ; /*счётчик*/ counter : integer ; /*счётчик повторов*/
ind : integer ; /*счётчик*/ i = 1; /*индексация в строке от 1*/ counter = 1; /*символ уже однажды встретился*/
пока(i<длина(s)) ( /*по-моему в Паскале последующее сравнение реализуется с помощью ord или chr, забыл уже*/ если(s[i] == s[i+1]) {i:=i+1; counter:=counter+1; } иначе ( res:= res + строка(counter); res:= res + s[i]; i:=i+1; ) ) /*Запись строки res в файл.*/ /*Обнуление res*/
_________________ Я не суеверный. Я наблюдательный
Последний раз редактировалось khasya 04.01.2005 1:23, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Олжас Написал на Делфи 7. В принципе перенести на Турбо Паскаль очень просто.
Вот ссылка на архив с исходником.
http://cp.people.overclockers.ru/cgi-bi ... laghas.rar Если надо обратная распаковка рапаковка - пиши. Помогу - пока время есть.] Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 14:14
Member
Статус: Не в сети Регистрация: 01.06.2003 Откуда: Pskov
Код:
Function UnpackStr(S:string):string; Const ResultStr :string =''; counterS :string =''; counterB :word =0; j :word =0; res :integer=0; i :byte =0;
Begin
for i:=1 to length(s) do begin case s[i] of '0'..'9':counterS:=counterS+s[i]; 'A'..'Z': begin val(counterS,counterB,res); if counterS='' then counterB:=1; for j:=1 to counterB do ResultStr:=ResultStr+s[i]; counterS:=''; end; else writeln('ERROR!!! Недопустимый символ!: ',s[i]); end;{case} end;
procedure AddNCh; begin str(counter,counterS); if counter=1 then counterS:=''; ResultS:=ResultS+counterS+prevCh; counter :=1; counterS:=''; prevCh:=s[i]; end;
Begin PrevCh:=s[1]; for i:=2 to length(S) do if PrevCh=s[i] then inc(counter) else AddNCh; AddNCh;
Junior
Статус: Не в сети Регистрация: 15.08.2004 Откуда: Казахстан
Мне вот код дали решенной задачи этой я проверял работает но я некоторые вещи не понял не могли нписать комминтарий к сложным функциям
Код:
program NSolve; var Symbol:array[1..100] of char; RepeatsCount:array[1..100] of integer; N:integer; { S:string; } procedure Init; var ch:char; C:integer; begin { if paramcount=0 then begin } assign(input,'g.in'); { end else begin s:=paramstr(1); assign(input,s); end; } reset(input); N:=0; while not seekeoln(input) do begin inc(N); read(ch); if ch in ['0'..'9'] then begin C:=0; while ch in ['0'..'9'] do begin C:=C*10+ord(ch)-48; read(ch); end; end else C:=1; Symbol[N]:=ch; RepeatsCount[N]:=C; end; close(input); end; procedure Run; var i,j:integer; begin j:=0; for i:=1 to N do While RepeatsCount[i]>0 do begin inc(j); if j>40 then begin writeln; j:=1; end; write(Symbol[i]); dec(RepeatsCount[i]); end; writeln; end; begin Init; { if paramcount=0 then begin } assign(output,'g.out'); { end else begin delete(s,length(s)-2,3); s:=s+'res'; assign(output,s) end; } rewrite(output); Run; close(output); end.
Junior
Статус: Не в сети Регистрация: 15.08.2004 Откуда: Казахстан
Вот задача:
Дано число N (1 <= N <= 100000), а затем N натуральных чисел из диапазона от 1 до 100.
Выведите N чисел в неубывающем порядке
Пример
5
5 4 3 2 1
Ответ
1 2 3 4 5
Ну я написал но массив не может работать если колво цифр большое вот мое решение
Код:
type s=array[1..32000] of integer; var m:s; i,buf,k,n:integer; f1,f2:text; begin assign(f1,'input.txt'); assign(f2,'output.txt'); reset(f1); rewrite(f2); read(f1,n); for k:=1 to n do read(f1,m[k]); for i:=1 to n-1 do begin for k:=1 to n-1 do begin if m[k]>m[k+1] then begin buf:=m[k]; m[k]:=m[k+1]; m[k+1]:=buf end; end; end; for k:=1 to n do write(f2,m[k],' '); close(f1); close(f2); end.
При увеличение массива больше чем 32000 паскаль начинает ругаться ordinal type expected ну я перевел но что нужно сделать чтоб было array[1..100000].....? Скажите please/ Отредактировано куратором: Lord_of_Darkness. Дата: 05.03.2006 14:15
Member
Статус: Не в сети Регистрация: 01.06.2003 Откуда: Pskov
Олжас
В турбо паскале размер каждого сегмента (кода/данных) ограничен 64Кбайтами. Соответственно, размер любой переменной, в том числе и массива, должен укладываться в эти 64Кб. Если не укладывается, то статическими переменными воспользоваться вряд ли удастся. Необходимо переходить к динамическим.
Но даже в этом случае в туро-паскакале невозможно будет создать одномерный массив с количеством элементов больше $FFFF (=65000) и общим размером больше $FFFF байтов (=64Кб). Зато теперь можно использовать несколько таких динамических 64-х килобайтных массивов.
В твоем случае вместо одного массива можно использовать 3..4 массива. А обращаться к ним можно через процедуру/функцию (например, SetArray(idx:longint;data:integer) / GetArray(idx:longint):integer), внутри которых по индексу определять, к какому именно из трех массивов производить обращение.
Пример тут накатал:
Код:
{$I C:\programS\TP\_common\byte2xxx.inc} {byte2xxx.inc содержит Word2hex,DWord2hex -- простые функции, выводящие число в шестнадцатиричном виде.}
Const ArrSz=$1000; {количество элементов во вспомогательном массиве} myArrNum=4; {число вспомогательных массивов}
Type DynArr=array[1..ArrSz] of longint; {тип вспомогательного массива} DynArrT=^DynArr;
Var index:longint; myArray:array [1..myArrNum] of DynArrT; {собственно ПСЕВДОмассив повышенной вместимости, к его элементам необходимо обращаться через GetArray/SetArray}
Function GetArray(idx:longint):longint; Var diapazon:byte; Begin diapazon:=((idx-1) div ArrSz); if diapazon<(myArrNum) then GetArray:=MyArray[diapazon+1]^[idx-ArrSz*diapazon]; End;
Procedure SetArray(idx:longint;data:longint); Var diapazon:byte; Begin diapazon:=((idx-1) div ArrSz); if diapazon<(myArrNum) then MyArray[diapazon+1]^[idx-ArrSz*diapazon]:=data; End;
if MaxAvail{MemAvail}>myArrNum*SizeOf(DynArr) then begin
ShowFreeMem;
for i:= 1 to myArrNum do New(MyArray[i]);
for i:= 1 to myArrNum do writeln(i,': segment = ',word2hex(Seg(MyArray[i]^)), '; offset = ',word2hex(Ofs(MyArray[i]^)));
ShowFreeMem;
{----------Работа с ПСЕВДОмассивом-------------------------------} for index:=1 to ArrSz*myArrNum do SetArray(index,index); for index:=1 to ArrSz*myArrNum do if GetArray(index)<>index then begin writeln('Error!!! index=',index); readln; end; {-----------------------------------------}
for i:= myArrNum downto 1 do Dispose(MyArray[i]); end else writeln('Error!!! Не хватает памяти !');
ShowFreeMem;
END. для удобства использования лучше организовать это дело в виде объекта
Есть еще вариант: организовать "свой" массив через указатели -- но с этим ты вряд ли справишься .
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения