Змінюй хід війни! Допомагай ЗСУ!

Нужна помощь Pascal

  • Автор теми Автор теми Nykka
  • Дата створення Дата створення
Ну, вот для первой задачи вроде сделал.
Вроде работает. По крайней мере, массив создаёт. И числа вроде уникальные.

Прошу профи-программеров помидорами не кидаться.:rolleyes:

Жду от прелестной заказчицы фото в купальнике. Решение остальных задач обсудим после... ;)

PHP:
program random20;

 var m:array[1..20] of real;
 r:real;
 i,j:byte;
 unicum:boolean;
begin
 {Задаём значение первого элемента }
 randomize;
 m[1]:=random(100);
 {Для остальных элементов прежде чем присвоить значение,
 проверяем его на отсутствие совпадений}
 for i:=2 to 20 do {начинаем со второго элемента}
 begin

  repeat {повторяем, пока не найдём уникальное число}
  unicum:=true; {перед проверкой считаем число уникальным}
  randomize;
  r:=random(100); {придумываем случайное число}
  for j:=1 to i-1 do {перебираем все элементы от первого до очередного
  присвояемого}
   begin
    if r=m[j] then unicum:=false;{если совпало - значит не уникальный}
   end;

   until unicum=true;
  if unicum then m[i]:=r; {Когда найден уникальный элемент - присваиваем}
 end;
 for i:=1 to 20 do writeln('m[',i,']=',m[i]:3:5); {Выводим массив на экран}

 readln;{Ждём нажатия Энтер}
end.

Вот что выдаёт программа:

m[1]=2.00000
m[2]=12.00000
m[3]=70.00000
m[4]=79.00000
m[5]=37.00000
m[6]=46.00000
m[7]=4.00000
m[8]=14.00000
m[9]=71.00000
m[10]=81.00000
m[11]=39.00000
m[12]=93.00000
m[13]=51.00000
m[14]=60.00000
m[15]=18.00000
m[16]=28.00000
m[17]=86.00000
m[18]=95.00000
m[19]=53.00000
m[20]=62.00000

Естественно, при повторном запуске числа уже другие. Но не повторяются!

m[1]=59.00000
m[2]=69.00000
m[3]=26.00000
m[4]=36.00000
m[5]=94.00000
m[6]=3.00000
m[7]=61.00000
m[8]=70.00000
m[9]=28.00000
m[10]=83.00000
m[11]=41.00000
m[12]=50.00000
m[13]=8.00000
m[14]=17.00000
m[15]=75.00000
m[16]=33.00000
m[17]=42.00000
m[18]=0.00000
m[19]=10.00000
m[20]=67.00000
 
Останнє редагування:
:клас: Есть таки настоящие программисты :) Спасибо за задачку. Хотя и не без греха :D " фото"
 
Я уже и вторую сделал. Просто в первую программу добавил пару строчек.
В том цикле, где выводятся значения элементов массива, добавил перемножение.
Чуть не забыл перед началом цикла присвоить r:=1; :)
А потом берём по модулю.
Ну, вот, что выдаёт программа:

m[1]=73.00000
m[2]=83.00000
m[3]=41.00000
m[4]=50.00000
m[5]=8.00000
m[6]=17.00000
m[7]=75.00000
m[8]=85.00000
m[9]=42.00000
m[10]=52.00000
m[11]=10.00000
m[12]=19.00000
m[13]=22.00000
m[14]=31.00000
m[15]=89.00000
m[16]=99.00000
m[17]=56.00000
m[18]=66.00000
m[19]=24.00000
m[20]=33.00000
Произведение элементов массива = 7.8604401636E+31


В общем, фото давай! :)
 
вымогатель :))) ... нет фото..
 
ну..... так не интересно.
Я, может, познакомиться хочу :)
Если что, я высокий брюнет, мне 30 лет, работаю в ХАДИ.
 
Ну, вот для первой задачи вроде сделал.
Вроде работает. По крайней мере, массив создаёт. И числа вроде уникальные.

Прошу профи-программеров помидорами не кидаться.:rolleyes:

Жду от прелестной заказчицы фото в купальнике. Решение остальных задач обсудим после... ;)

PHP:
program random20;

 var m:array[1..20] of real;
 r:real;
 i,j:byte;
 unicum:boolean;
begin
 {Задаём значение первого элемента }
 randomize;
 m[1]:=random(100);
 {Для остальных элементов прежде чем присвоить значение,
 проверяем его на отсутствие совпадений}
 for i:=2 to 20 do {начинаем со второго элемента}
 begin

  repeat {повторяем, пока не найдём уникальное число}
  unicum:=true; {перед проверкой считаем число уникальным}
  randomize;
  r:=random(100); {придумываем случайное число}
  for j:=1 to i-1 do {перебираем все элементы от первого до очередного
  присвояемого}
   begin
    if r=m[j] then unicum:=false;{если совпало - значит не уникальный}
   end;

   until unicum=true;
  if unicum then m[i]:=r; {Когда найден уникальный элемент - присваиваем}
 end;
 for i:=1 to 20 do writeln('m[',i,']=',m[i]:3:5); {Выводим массив на экран}

 readln;{Ждём нажатия Энтер}
end.

Вот что выдаёт программа:

m[1]=2.00000
m[2]=12.00000
m[3]=70.00000
m[4]=79.00000
m[5]=37.00000
m[6]=46.00000
m[7]=4.00000
m[8]=14.00000
m[9]=71.00000
m[10]=81.00000
m[11]=39.00000
m[12]=93.00000
m[13]=51.00000
m[14]=60.00000
m[15]=18.00000
m[16]=28.00000
m[17]=86.00000
m[18]=95.00000
m[19]=53.00000
m[20]=62.00000

Естественно, при повторном запуске числа уже другие. Но не повторяются!

m[1]=59.00000
m[2]=69.00000
m[3]=26.00000
m[4]=36.00000
m[5]=94.00000
m[6]=3.00000
m[7]=61.00000
m[8]=70.00000
m[9]=28.00000
m[10]=83.00000
m[11]=41.00000
m[12]=50.00000
m[13]=8.00000
m[14]=17.00000
m[15]=75.00000
m[16]=33.00000
m[17]=42.00000
m[18]=0.00000
m[19]=10.00000
m[20]=67.00000

Н-да.

Код:
const
  lArrayLowBound = 0;
  lArrayHighBound = 19;
  lRandomBase = 100;
var
  lArray: array [lArrayLowBound..lArrayHighBound ] of Integer;
  lIndex: Integer;
begin
  Randomize;
  for lIndex := lArrayLowBound to lArrayHighBound do begin
    lArray[lIndex] := Random(lRandomBase) + (lRandomBase * lIndex);
    // или
    // lArray[lIndex] := Random(1) + lIndex; // в соответствии с ТЗ
    Writeln(lArray[lIndex]);
  end;
  Readln;
end.
 
Останнє редагування:
это же не форум знакомств :) в ХАДИ очень много прелестных девушек! :) Хотя приятно... но все же хотелось бы по сути дела...
 
Так в задании ж написано
числами, которые не повторяются.
В этом и прикол. А то б программа вообще в три строчки была бы.

А так вот:
первому элементу суём случайное число. Оно априори уникально.
А для других элементов прежде чем присвоить случайное число, это число сравниваем со всеми предыдущими элеменатми. Если находим совпадения - опаньки, надо другое число. Взяли другое число - опять сравнили с каждым из предыдущих. Если совпадений нет - отлично. Присваиваем и идём дальше.
 
В задаче сказано, что нужно сгенерить 20 разных чисел. О проверке там речи не было.
 
lArray[lIndex] := Random(lRandomBase) + (lRandomBase * lIndex);


1. любое из ста + 100 = 1хх
2. любое из ста + 200 = 2хх
...
20. любое из 100 + 2000 = 20хх
 
Кстати, если копипастить текст программы с форума в редактор Turbo Pascal, он так прикольно побуквенно "печатается" :)

А ещё Turbo Pascal 7 не понял символы // как знак комментариия.
 
так же само как и lArray[lIndex] := Random(1) + lIndex;
 
1. любое из ста + 100 = 1хх
2. любое из ста + 200 = 2хх
...
20. любое из 100 + 2000 = 20хх

Гы, во прикол! Точно!
Совпадений не будет. Ты прав!
Вот только числа не совсем случайные получаются.
Не уверен, что такое примут. Впрочем, пусть принимают! :) В следующий раз будут более чёткие задания давать :)
 
AS0kol, не умничай. а то препод не поймет и пошлет :D
(что, собственно, и надо)
вообще не понимаю смысла этого - неужели вас там даже не спрашивают "что это и как работает?"?
 
Тогда так:
PHP:
program random for fun;
 var m: array[1..20] of real;
i:byte;
r:real;
begin
 r:=random(1);
 for i:=1 to 20 do m[i]:=i;
end.

Вот так! И функция рандом используется, и числа не совпадают :D
 
А всё-таки, что за техникум? Может, техникум молочной промышленности?
Кстати, у них хоть заставляют самим программки писать.
А у нас студенты программу могут написать только если им листик с готовой программой выдать :)
И то ошибки будут :)

Nykka, я вам в личку сообщение написал...



так и не понял функцию ei*cosj
Решил, что i и j - номера столбца и строки массива.
Записал как z[i,j]:=exp(i)*cos(j);

И это дурное условие: меняем положительные числа на нули, а нули на единицы.
Сделал так:
PHP:
if z[i,j]>=0 then
                 if z[i,j]>0 then z[i,j]:=0 else z[i,j]:=1;


Гм... Что-то заказчица отмалчивается.
Ну ладно, если натурой не согласна - возьму деньгами :(
 
Останнє редагування:
Назад
Зверху Знизу