Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
37
Добавлен:
19.03.2015
Размер:
580 Кб
Скачать

30. Заменить отрицательные элементы линейного массива их модулями, не пользуясь стандартной функцией вычисления модуля. Подсчитать количество произведенных замен.

type mas=array[1..100] of integer;

var i,n,k:integer;

a:mas;

begin

writeln('Vvedite kolvo elementov massiva:');

readln(n);

for i:=1 to n do

begin

     if random(5) mod 2 = 0 then

     a[i]:=random(100)

     else

     a[i]:=(-1)*random(100);

     write(a[i],' ');

end;

k:=0;

writeln;

for i:=1 to n do

begin

     if a[i]<0 then

     begin

          a[i]:=(-1)*a[i];

          k:=k+1;

     end;

     write(a[i],' ');

end;

writeln;

writeln('kolvo otricatelnih chisel: ', k);

end.

31. Найти наименьший нечетный натуральный делитель К (К<>1) любого заданного натурального числа n.

program lab;

var

n,k,i:integer;

begin

writeln('Vvedite n:');

readln(n);

i:=1; k:=1;

while (k=1) and (i<n) do

begin

i:=i+1;

if ((i mod 2)=1) and ((n mod i)=0) then k:=i;

end;

if k<>1 then writeln('Min nechet delitel: ',k)

else writeln('Net min nechet delitelya <> 1');

end.

32. Найти все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность (например, 1234,5789).

program lab32;

var

i, i1, i2: integer;

n: byte;

procedure Check(x:longint; num:byte);

var

S: string;

c: byte;

begin

S:=inttostr(x); //пеğеводим число в стğоку

for c:=2 to num do // и со втоğого символа числа пğовеğяем

if S[c]<=S[c-1] then break //если пğедыдущий символ меньше либо ğавен

//текущему, выходим из цикла

else if c=num then write(S,' '); // иначе если текущий символ - последний

//пишем число

end;

 

begin

Writeln('Введите количество символов в числе ',n);

Readln(n);

i1:=round(exp((n-1)*ln(10)));

i2:=round(exp(n*ln(10)))-1;

for i:=i1  to i2 do

    Check(i,n);

end.

33. Составить программу, определяющую, в каком из данных двух чисел больше цифр. Задачу решить с использованием процедуры или функции.

program lab33;

var a,b:longint;

 

function Check(n:integer):integer;

var

  temp,c:integer;

begin

  temp:=n;

  c:=0;

  while temp<>0 do

  begin

    inc(c);

    temp:=temp div 10

  end;

  Check:=c

end;

 

begin

Writeln('Vvedite 1 chislo');

Readln(a);

Writeln('Vvedite 2 chislo');

Readln(b);

if Check(a)>Check(b) then writeln('V 1 chisle znakov bolshe')

else if Check(a)<Check(b) then writeln('Vo 2 chisle znakov bolshe')

else writeln('V chislah znakov odinakovo');

end.

34. Услуги телефонной сети оплачиваются по следующему правилу: за разговоры до А минут в месяц - В руб., а разговоры сверх установленной нормы оплачиваются из расчёта С руб., за минуту. Написать программу, вычисляющую плату за пользование телефоном для введённого времени разговоров за месяц.

program lab34;

const

a=360;

b=180;

c=2;

var

k,p:integer;

begin

writeln('Vvedite skolko vremeni vi naboltali (v min.):');

readln(k);

if k<=A then

begin

p:=b;

writeln('Vi ulojilis v normu (',a,'min.)');

end

else

begin

p:=b+((k-a)*c);

writeln('Vi NE ulojilis v normu (',a,'min.)')

end;

writeln('Vasha oplata za telefon sostsvlyaet ',p,' rub.');

end.

35. Дана строка; слова разделены пробелами. Подсчитать, сколько в ней букв r, k, t.

program lab35;

var s:string;

n,i:integer;

begin

writeln('Vvedite stroku');

readln(s);

n:=0;

for i:=1 to length(s) do

   if (s[i]='r') or (s[i]='k') or (s[i]='t') then

     n:=n+1;

writeln('V stroke naydeni bukvi r, k, t : ', n, ' raz');

end.

Второй вариант

Program  lab35_1

var s:string;

nr,nk,nt,i:integer;

begin

writeln('Vvedite stroku');

readln(s);

nr:=0;

nk:=0;

nt:=0;

repeat

if pos(‘r’,s)<>0 then begin inc(nr); delete(s,pos(‘r’,s),1); end

else

if pos(‘k’,s)<>0 then begin inc(nk); delete(s,pos(‘k’,s),1); end

else

if pos(‘t’,s)<>0 then begin inc(nt); delete(s,pos(‘t’,s),1); end

else break;

until false;

writeln('V stroke naydeni bukvi r: ', nr, ' raz');

writeln('V stroke naydeni bukvi k: ', nk, ' raz');

writeln('V stroke naydeni bukvi t: ', nt, ' raz');

end.

36. Составить программу, определяющую результат гадания на ромашке – «любит – не любит», взяв за исходное данное количество лепестков n.

program lab36;

var

k:integer;

begin

writeln('Vvedite kolichestvo lepestkov');

readln(k);

if k mod 2 =0 then writeln('Ne lubit') else writeln('Lubit');

end.

 

Второй вариант

program lab36;

var

k:integer;

begin

writeln('Vvedite kolichestvo lepestkov');

readln(k);

if Odd(k) then writeln('Lubit')  else writeln('Ne lubit');

end.

37. Задана последовательность N целых чисел. Вычислить сумму элементов массива, порядковые номера которых совпадают со значением этого элемента.

program lab37;

var

a:array [1..100] of integer;

i,n,l:integer;

begin

randomize;

l:=0;

writeln('Vvedite kolvo elementov');

readln(n);

for i:=1 to n do

begin

    a[i]:=random(100);

    write(a[i],' ');

    if a[i]=i then l:=l+a[i];

end;

writeln;

writeln('Summa: ',l);

end.

38. Вычислить у = sin1 + sin1,1 + sin1,2 + … + sin2.

program lab38;

var g,x:real;

k:integer;

begin

x:=1;

g:=0;

repeat

g:=g+sin(x);

writeln('sin(',x,') = ',g:4:3);

x:=x+0.1;

until (x>2);

writeln('Summa = ',g:4:3);

end.

39. Заполнить таблицу размерности n*n:

1 1 1 1 … 1

0 2 2 2 … 2

0 0 3 3 … 3

……………

0 0 0 0 … n

program lab39;

type mas=array[1..10, 1..10] of integer;

var n,i,j:integer;

a:mas;

begin

writeln('Vvedite razmernost matrici (<10): ');

readln(n);

for i:=1 to n do

    for j:=1 to n do

    begin

         if j<i then a[i,j]:=0

         else a[i,j]:=i;

    end;

for i:=1 to n do

begin

    for j:=1 to n do

    write(a[i,j],' ');

writeln;

end;

end.

40. Дана строка, содержащая английский текст; слова разделены пробелами. Найти количество слов, начинающихся с буквы b.

program lab40;

type mas=array[1..100] of string;

var

  s,sr:string;

  i,f,k:integer;

  m:mas;

procedure sl(s:string; var m:mas);

begin

 sr:=''; k:=1;

 for i:=1 to length(s) do

  if s[i]<>' ' then sr:=sr+s[i]

  else

    begin

      m[k]:=sr;

      k:=k+1;

      sr:='';

    end;

  m[k]:=sr;

end;

 

begin

writeln('Vvedite stroku');

readln(s);

sl(s,m);

for i:=1 to k do

     begin

      sr:=m[i];

      f:=0;

      if (sr[1]='b') or (sr[1]='B') then

      f:=1;

      if f=1 then writeln(m[i]);

      end;

end.

41. Дана строка символов, среди которых есть одна открывающаяся и одна закрывающаяся скобка. Вывести на экран все символы, расположенные внутри этих скобок.

program lab41;

var

s,sl:string;

i,k,p,l:integer;

begin

writeln('Vvedite stroku:');

readln(s);

k:=0;

p:=0;

for i:=0 to length(s) do

begin

k:=pos('(',s);

p:=pos(')',s);

end;

if (k<>0) and (p<>0) then

begin

sl:=copy(s,k+1,p-k-1);

writeln('Tekst vnutri skobok: ', sl);

end;

end.

42. Дана последовательность действительных чисел а1,а2,…,аn. Указать те элементы, которые принадлежат отрезку [c,d].

program lab42;

var

a:array [1..100] of integer;

i,k,c,d,n:integer;

begin

randomize;

writeln('Vvedite c and d:');

readln(c,d);

writeln('Vvedite kolvo elementov posledovatelnosti');

readln(n);

writeln('Elementi posledovatelnosti:');

for i:=1 to n do

    begin

    a[i]:=random(40);

    write(a[i],' ');

    end;

writeln;

write('Elementi posledovatelnosti iz [',c,',',d,']: ');

k:=0;

for i:=1 to n do

    if (a[i]>=c) and (a[i]<=d) then

    begin

    write(a[i],' ');

    k:=k+1;

    end;

if k=0 then write('ne takih');

end.

43. Запишите двойственную задачу к задаче:

f=-12x1-4x2→min,

x1,x2 0,

3x1+x2 4,

-x1-5x2 -1,

2x1 2,

x1-x2 0,

x1+x2 1.

Укажите значение целевой функции и оптимальный план двойственной задачи (не решая ее), решив графически или другим способом исходную задачу.

Решение:

1) 3*x1 + 2*x2 = 4

x1 x2

0 2

1 1

2) x1 + x2 = 1

x1 x2

0 1

1 0

3) 2x1 = 2

4) -x1 – 5x2 = -1

x1 x2

1 0

6 -1

5) x1 - x2 = 0

x1 x2

0 0

1 1

Построим графики всех функций и найдем область, которую они ограничивают.

grad: (0,0) : (-12, -4).

Область допустимых решений – пустое множество (т.е. система ограничений несовместима).

Проверим на Maple.

> with(plots);

> inequal({3*x1+2*x2>=4, x1+x2>=1, 2*x1>=2, x1-x2>=0, -x1-5*x2>=-1, x1>=0, x2>=0}, x1=-5..5, x2=-5..5, optionsfeasible=(color=blue),optionsexcluded=(color=white));

 

44. В строке имеется одна точка с запятой (;). Подсчитать количество символов до точки с запятой и после неё.

var s:string;

i,k,n:integer;

begin

writeln('Vvedite stroku:');

readln(s);

i:=0;

i:=pos(';',s);

k:=i-1;

n:=length(s)-i;

if i<>0 then writeln('Do ";" : ',k,' simv., posle ";" ', n, ' simv.')

else writeln('; NE naydena');

end.

45. Решите задачу линейного программирования графическим методом.

f=2x1+x2→min,

x1, x2 0,

2x1+3x2 6,

2x1+x2 4,

x1 1,

x1-x2 -1,

2x1+x2 1.

Решение:

1) 2*x1 + 3*x2 = 6

x1

x2

0

2

3

0

 

2) 2*x1 + x2 = 4

x1

x2

0

4

2

0

3) x1 = 1

4) x1 – x2 = -1

x1

x2

0

1

-1

0

 

5) 2*x1 + x2 = 1

x1

x2

0

1

0.5

0

 

Построим графики всех функций и найдем область, которую они ограничивают.

grad: (0,0) : (2,1).

Точка находится на пересечении 1 и 3 уравнений.

Решим систему:

2*x1 + x2 = 1            

x2 = 0

x1 = 0.5

x2 = 0

f(max) = 2*0.5 + 0 = 1.

 

Проверим на Maple.

> with(plots);

> inequal({2*x1+3*x2<=6, 2*x1+x2<=4, x1<=1, x1-x2>=-1, 2*x1+x2>=1, x1>=0, x2>=0}, x1=-5..5, x2=-5..5, optionsfeasible=(color=blue),optionsexcluded=(color=white));

 

 

> with(simplex);

> minimize(2*x1+x2, {2*x1+3*x2<=6, 2*x1+x2<=4, x1<=1, x1-x2>=-1, 2*x1+x2>=1}, NONNEGATIVE);

                        

46. При поступлении в вуз абитуриенты, получившие двойку на первом экзамене, ко второму не допускаются. В массиве A[n] записаны оценки экзаменующихся, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.

var

b:array[1..100,1..3] of string;

n,k,i,j:integer;

begin

k:=0;

writeln('Vvedite n:');

readln(n);

for i:=1 to n do

begin

writeln('Vvedite familiu abiturienta:');

readln(b[i,1]);

writeln('Vvedite ocenku abiturienta:');

readln(b[i,2]);

end;

 

for i:=1 to n do

begin

for j:=1 to 2 do

write(b[i,j],' ');

writeln;

end;

 

writeln('Nedopusheni:');

for i:=1 to n do

if (b[i,2]<'3') then

begin

     write(b[i,1],' ');

     writeln;

     k:=k+1;

end;

writeln('Kolichestvo nedopusenih: ', k);

end.

47. Дана строка; слова разделены пробелами. Подсчитать, сколько слов в строке.

program lab47;

var s:string;

    i,k:integer;

begin

writeln('Vvedite stroku');

readln(s);

   k:=1;

   for i:=1 to length(s) do

    if (s[i]=' ') and (s[i+1]<>' ') then

    k:=k+1;

    writeln(k);

end.

48. Заполнить таблицу размерности n*n:

1 1 1 … 1

2 2 2 … 2

………….

n n n … n

program lab48;

type mas=array[1..100, 1..100] of integer;

var a:mas;

i,n,j:integer;

begin

writeln('Vvedite n');

readln(n);

for i:=1 to n do

    for j:=1 to n do

    a[i,j]:=i;

 

for i:=1 to n do

begin

    for j:=1 to n do

    write(a[i,j],' ');

    writeln;

end;

end.

49. У вас есть доллары. Вы хотите обменять их на рубли. Есть информация о стоимости купли-продажи в банках города. В городе N банков. Составьте программу, определяющую, какой банк выбрать, чтобы выгодно обменять доллары на рубли.

var

a:array[1..100]of integer;

i,j,n,k:integer;

begin

writeln('Vvedite kolichestvo bankov:');

readln(n);

writeln('Vvedite stoimost pokupki dollara v bankah:');

for i:=1 to n do

begin

write('V ',i,'-om banke ');

readln(a[i]);

end;

k:=1;

for i:=1 to n do

if a[i]>a[k] then k:=i;

writeln('Vigodney prodat dollar v',' ',k,' ','banke za',' ',a[k],' ','rub');

end.

50. Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно палиндромом).

var

   word: string;

   j: integer;

   sim: boolean;

begin

writeln('Vvedite stroku');

readln(word);

sim := true;

for j := 1 to length(word) div 2 do

   sim := sim and (word[j] = word[length(word) - j + 1]);

if sim then writeln('palindrom') else writeln('ne palindrom');

end.

Соседние файлы в папке Вопросы и ответы нах