Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 2
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]
Модераторы: paradise, KMA
  

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

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]

Форум работает на скрипте © Ikonboard.com