Guest
Новичок
|
так значит, сделать массив, затем найти кратные трём, поставить в порядке возрастания в конце массива(порядок следования остальных массивов элем сохраняется) пример [5,6,-2,1,-12,-9]-->[5,-2,1,-12,-9,6] вот моя версия! вопрос вот в чём почему мой массив в порядке возрастания не все элементы выводит? program mas_2; const n=5; var m,m2,m2_1,m3:array[1..n] of integer; i,j:1..n; k,h:0..n; a:integer; Begin for i:=1 to n do begin writeln('введите ',i,' элемент '); readln(m) end; writeln('исходный'); for i:=1 to n do write(m,' '); writeln; for i:=1 to n do if m mod 3=0 then begin m2[k]:=m; k:=k+1; end; for k:=1 to n-1 do for j:=1 to n-k do if m2[k]>m2[j+1] then begin a:=m2[j]; m2[j]:=m2[j+1]; m2[j-1]:=a; end; writeln('упорядоченный'); for i:=1 to n do write(m2[k],' '); readln End.
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 16 дек. 2007 19:14 | IP
|
|
KMA
Долгожитель
|
так значит, сделать массив, затем найти кратные трём, поставить в порядке возрастания в конце массива(порядок следования остальных массивов элем сохраняется) пример [5,6,-2,1,-12,-9]-->[5,-2,1,-12,-9,6]
Массив плохо копируешь... идея в следующем. Копируешь массив, если при этом встречается кратный трем, то его размещаешь в конце. Должно получиться что-то вроде этого.
Code Sample:
k:=0; {счетчик кратных трем элементов} for i:=1 to n do begin if m[ i ] mod 3 <>0 then m2 [i-k]:=m[ i ] else begin m2[n-k]:=m[ i ]; inc (k); end; end;
Ну а далее сортируешь элемент, только начиная с элемента k и до конца массива, т. е. до n.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 17 дек. 2007 17:26 | IP
|
|
LUX
Новичок
|
Народ, помогите, зачёты, а Програмирование горит... чего то не получаются простые задачи (относительно простые).... 1.Реализовать умножение длинных чисел, хранящихся в строках. Использовать функции работы со строками и символами нельзя. Использовать записи с вариантами 2.Написать функцию, вычисляющую длину отрезка по координатам его концов. На основе этой функции написать функцию, вычисляющую по формуле Герона площадь выпуклого многоугольника, заданного координатами вершин. Функция должна через параметр, передаваемый по ссылке, сообщать о возможности вычислить площадь. 3. Не используя циклы с помощью рекурсии найти минимальный элемент массива.
|
Всего сообщений: 4 | Присоединился: декабрь 2007 | Отправлено: 17 дек. 2007 21:29 | IP
|
|
KMA
Долгожитель
|
3. Не используя циклы с помощью рекурсии найти минимальный элемент массива.
Решил, потому что более или менее сложная и интересная.
Code Sample:
VAR a: array [1..n] of integer; function min (m: integer, i: byte): integer; begin if i=n then if m>a[n] then min:=m else min:=a[n] else if a[ i ]>m then min:=min (m, i+1) else min:=min(a[ i ], i+1) end; Вывывать будешь так min (a[1], 2)
(Сообщение отредактировал KMA 18 дек. 2007 14:58)
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 17 дек. 2007 23:31 | IP
|
|
LUX
Новичок
|
KMA, спасибо. Хотя работаает у меня она пока не так как надо. Выдаёт эл-т но не минимаьный... Н в принципе мысль есть, ддальше сам буду пробовать думать и разбираться. {Решил, потому что более или менее сложная и интересная.} То есть остальные -- детский сад? Особенно про умножение длин. чисел записями.... Вывод: КМА -- Вы мозг !!! И исчо одна уж очень интересная, особенно для меня Найти в произвольном файле самый редко встречающийся байт (byte), слово (word, два байта). Хоть бы намёк какой... Тупой я чтоль... )
|
Всего сообщений: 4 | Присоединился: декабрь 2007 | Отправлено: 18 дек. 2007 1:04 | IP
|
|
KMA
Долгожитель
|
Хотя работаает у меня она пока не так как надо. Выдаёт эл-т но не минимаьный... Н в принципе мысль есть, ддальше сам буду пробовать думать и разбираться.
Я с рекурсией опечатался =) Но уже исправил. Там в последнем условии сравнивается текущий элемент i не последний. Если тебе так интересна работа с длинными числами, то ничего особенного там нет. Информацию можно посмотреть внешняя ссылка удалена.
Найти в произвольном файле самый редко встречающийся байт (byte), слово (word, два байта).
В смысле редкий байт? Все байты одинаковые Может значение байта? (Сообщение отредактировал KMA 18 дек. 2007 14:59)
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 18 дек. 2007 14:54 | IP
|
|
LUX
Новичок
|
Уже самому пришлось разобраться, и искать проблему. Долго мучался, но получилось. СПАСИБО!! Ну да, получается так, самое редкое значение байта, слова (word, два байта). Поможешь? И за ссылку тож отдельная благодарность, ща почитаю что там... Может найду нужного чего-нить
|
Всего сообщений: 4 | Присоединился: декабрь 2007 | Отправлено: 18 дек. 2007 16:08 | IP
|
|
KMA
Долгожитель
|
Данная задача решается просто, если знать некоторые вещи. Во-первых файл, который ты открываешь может быть любого типа, поэтому в Паскале есть такой вид файлов, он называется бестиповый. Объявляется он в разделе описания следующим образом:
Code Sample:
VAR f: file;
Далее, когда объявил файл, тебе его необходимо связать с реально существующим файлом (это делается для удобства, дабы постоянно не писать полное имя файла). Поэтому ты должен проинициализировать переменную f файлового типа, это делается так:
Code Sample:
_pathToFile:='C:\labs\lab1\hello.obj'; assign (f, _pathToFile);
Где _pathToFile это обычная строка (путь к файлу). Можно указать либо абсолютный, либо относительный путь. Далее, когда ты связал файловую переменную с настоящим файлом, то все остальные операции с файлом ты будешь проделывать через эту переменную. Тебе необходимо открыть файл для чтения (для этого он должен уже существовать). Тогда ты должен использовать процедуру reSet (var f: file; bufsize: word), где f имя файловой переменной, а bufsize количество считываемых байт (которые будут считываться в буфер). Его размер возможен от 1 до 65535 байт (или от 1 байта, до 64 Кбайт). Тебе в данном случае вначале надо установить на 1 байт, т. е. команда будет выглядеть так:
Code Sample:
reSet (f, 1);
Чтение из файла выполняется при помощи blockRead (var f: file; var buf; count: word; [; result: word]); Она считывает из файла f одну или более записей в переменную buf (в нее все влезает), число считываемых записей указывается в count, а result - тебе возвращает количество фактически считанных записей. Т. е. считываение из файла у тебя будет проходить по команде:
Code Sample:
blockRead (f, buf, 1);
Если надо узнать размер файла (в блоках), то для этого служит функция fileSize (var f: file): longInt; Определить, конец ли файла поможет функция eof (var f: file): boolean; которая возвратит true в случае, если каретка (текущая позиция) стоит в конце. Определить позицию каретки в файле можно при помощи функции filePos(var f: file): LongInt; Установить же каретку в файл можно при помощи seek (f; n: LongInt);. А теперь о каретке. Когда мы указывали размер буфера (размер блока), то мы якобы поделили бестиповый файл на fileSize (f) блоков. Первоначально каретка стоит в нулевом блоке (т. к. считать начинаем с нуля, то первый блок будет иметь индекс 0). Далее если ты что-то считываешь, то, каретка пермещается ровно на столько блоков, сколько ты считал. Далее, зная эти процедуры и функции (а они стандартные), твоя задача становиться не труднее, чем найти самый редкий символ в тексте. Вот тебе и идея.
|
Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 18 дек. 2007 18:22 | IP
|
|
kp0t
Новичок
|
мне задали нужно написать программу, которая Перечисляет все слова предложения, которые состоят из тех же букв, что и первое слово предложения и заканчиваются на такую же букву, что и первое слово. Я не пойму как нужно сравнивать первое слово с остальным предложением, может кто поможет ?
|
Всего сообщений: 1 | Присоединился: декабрь 2007 | Отправлено: 20 дек. 2007 3:00 | IP
|
|
Guest
Новичок
|
Народ помогите решить задачку по паскалю 1.В строке S найти все слова, встречающиеся в больше двух раз. 2.В строке S найти все слова, встречающиеся в больше двух раз.(с помощью процедур) Заранее благодарен
|
Всего сообщений: Нет | Присоединился: Never | Отправлено: 20 дек. 2007 10:03 | IP
|
|
|