Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Помощ за задачи на Pascal (merged)

Featured Replies

Изясни си понятието константа. :_)

tyrmyk е декларира n като константа, а аз искам да не е константа ами стойността на n да се въвежда от клавиатурата.

  • Отговори 622
  • Прегледи 131,9k
  • Създадено
  • Последен отговор

tyrmyk е декларира n като константа, а аз искам да не е константа ами стойността на n да се въвежда от клавиатурата.

Може да декларираш така:

const n:real = 16;

Може да декларираш така:

const n:real = 16;

след тази редакция ми излезе, че не може да изчисли array [1..n, 1..n]

Не съм гледала цялата програма, но това което ми прави впечатление на пръв поглед (не съм изчела целия код) е следното. Дефинираш в началото, че n е константа = 16, a после се опитваш да присвоиш на n стойността на m, която е между 0 и 16. Естествено, че ще ти дава грешка. Щом не искаш n да е константа, просто не я дефинирай като такава.

Редактирано от yvsot (преглед на промените)

Не съм гледала цялата програма, но това което ми прави впечатление на пръв поглед (не съм изчела целия код) е следното.

Дефинираш в началото, че n е константа = 16, a после се опитваш да присвоиш на n стойността на m, която е между 0 и 16.

Естествено, че ще ти дава грешка. Щом не искаш n да е константа, просто не я дефинирай като такава.

Защото се опитва да си улесни работата, като използва една константа за две цели : хем да дефинира с нея масиви, хем да бъде и някаква променлива в програмата. :)

след тази редакция ми излезе, че не може да изчисли array [1..n, 1..n]

Или дефинирай масивите като динамични, или (което е по-лесното) използвай константа за масивите и отделна променлива.

Защото се опитва да си улесни работата, като използва една константа за две цели : хем да дефинира с нея масиви, хем да бъде и някаква променлива в програмата. :)

Или дефинирай масивите като динамични, или (което е по-лесното) използвай константа за масивите и отделна променлива.

е като използвам една кон станта и една променлива нали някъде тази константа трябва да приеме стойноста на променливата, за да може фактически да изгради масива в зависимост от стойността на променливата ... а как се прави динамичен масив ? :lighter:

е като използвам една кон станта и една променлива нали някъде тази константа трябва да приеме стойноста на променливата, за да може фактически да изгради масива в зависимост от стойността на променливата ... а как се прави динамичен масив ? :cool:

Например :

Type

TByteArray : Array of Byte;

Не се декларира размерността на масива, но преди да пишеш в него трябва да я зададеш с функцията SetLength, която запазва необходимата памет за елементите на масива.

Тук за масива А се запазва памет за 1000 елемента:

Var

A : TByteArray;

begin

SetLength(A,1000);

Разликата е, че при предварително декларирана размерност на масива, не можеш да я промениш в процеса на изпълнение на програмата.

Редактирано от Ken (преглед на промените)

Например :

Type

TByteArray : Array of Byte;

Не се декларира размерността на масива, но преди да пишеш в него трябва да я зададеш с функцията SetLength, която запазва необходимата памет за елементите на масива.

Тук за масива А се запазва памет за 1000 елемента:

Var

A : TByteArray;

begin

SetLength(A,1000);

Разликата е, че при предварително декларирана размерност на масива, не можеш да я промениш в процеса на изпълнение на програмата.

това наистина e по-сложния вариант :cool: добре на думи изглежда толкова лесно да се вмъкне тази опция, но всъщност не е така Публикувано изображение

това наистина e по-сложния вариант :cool: добре на думи изглежда толкова лесно да се вмъкне тази опция, но всъщност не е така Публикувано изображение

Ще седнеш, ще прочетеш кое как става, и ще се справиш.

такааа... всичко е готово без ЕДНО :) когато при въвеждането на броя редове и стълбове на масива(намира се в началото на кода) избера число различно от интервала [2;16] не ми излиза съобщението, което написах ... ето и кода

uses crt;


const maximum = 100;
      minimum = -100;
      max = 16;
var
      n : integer;
      data : array [1..16, 1..16] of real;
      min  : array [1..32]     of real;
      i, j, x, o : integer;
      num        : real;

Begin
clrscr;
writeln('*****************************************************************');
writeln;
Writeln('Vyvedete broq na redovete i stylbovete');
write('na kvadtratnata matrica (maksimalen broi ',max, '): '); readln(n);
 if ( n > 16 ) and ( n < 2 ) then
  begin
   Writeln('Matricata trqbva da e s maksimum 16 i minimum 2 reda i stylba');
   readln;
  end;
 x := 0;
 o := 0;
 repeat
  clrscr;
  writeln;
  writeln(' ':20, 'M E N U');
  writeln;
  writeln(' ':20, '1. Vyvejdane na masiva.');
  writeln(' ':20, '2. Izwejdane na ekrana na vavedeniq masiv.');
  writeln(' ':20, '3. Obrabotka i izpisvane na rezultata.');
  writeln(' ':20, '4. Izhod.');
  writeln;
  writeln;
  write(' ':20, 'Izberete opcia: ');
  readln(o);
  if ( o < 1 ) or ( o > 4 ) then
   begin
    write(' ':20, 'Izbrali ste ne sashtestvuvashta opcia.');
    readln;
   end;

 if o = 1 then
   begin
    clrscr;
    for i := 1 to n do
     begin
      writeln('Vavedete elementite na ', i, '-iq red:');
      for j := 1 to n do
       begin
        repeat
         write('Vavedete ', j, '-iq element: ');
         readln( data[i,j] );
         if ( data[i,j] < minimum ) or ( data[i,j] > maximum ) then
          begin
           writeln(' ':20, 'Molq vavedete realno chislo mejdu ', minimum, ' i ', maximum, '!');
           write('Vavedete ', j, '-iq element: ');
           readln( data[i,j] );
          end;
        until ( data[i,j] > minimum ) and ( data[i,j] < maximum )
       end;
     end;
    x := 1;
    readln;
   end;

 if o = 2 then
  begin
   if x = 0 then
    begin
     clrscr;
     writeln(' ':20, 'Ne ste vaveli masiv, molq vavedete stojnosti na masiva!');
     readln
    end
   else
    begin
     clrscr;
     for i := 1 to n do
      begin
       for j := 1 to n do write( data[i,j]:4:2, ' ' );
       writeln;
      end;
     readln;
    end;
  end;

 if o = 3 then
  begin
   if x = 0 then
    begin
     clrscr;
     writeln(' ':20, 'Ne ste vaveli masiv, molq vavedete stojnosti na masiva!');
     readln
    end
   else
    for i := 1 to 2*n do min[i] := maximum;
   for i :=1 to n do
    for j := 1 to n do
      if data[i,j] < min[i+j] then min[i+j] := data[i,j];
   num := min[3];
   writeln;
   writeln;
   writeln;
   for i := 3 to 2*n-1 do
    begin
     if num < min[i] then num := min[i];
     writeln ('Minimale element na diagonal nomer (suma na indeksite) ', i, ': ', min[i]:4:2);
    end;
   writeln;
   writeln;
   writeln('Naj-golemiqt ot minimalnite elementi e: ', num:4:2);
   readln;
  end;
 until o=4;

 readln;
END.

Редактирано от enriko_ (преглед на промените)

Дам, трябва ти OR. Само не ми е ясно защо след съобщението за грешка - програмата продължава?

Т.е. или трябва да я "зациклиш" докато не се въведе n между 2 и max или трябва да излезеш от програмата...

Редактирано от Q-tech (преглед на промените)

Не ти следя целта на задачата, но защо не направиш проверка с OR :

if ( n > 16 ) OR ( n < 2 ) then

това е, но как да задам repeat цикъла смисъл repeat...until (какво ? ) n<16 and n>2 ?

това е, но как да задам repeat цикъла смисъл repeat...until (какво ? ) n<16 and n>2 ?

repeat

Writeln('Vyvedete broq na redovete i stylbovete');

write('na kvadtratnata matrica (maksimalen broi ',max, '): '); readln(n);

if ( n > 16 ) and ( n < 2 ) then

begin

Writeln('Matricata trqbva da e s maksimum 16 i minimum 2 reda i stylba');

readln;

end;

until (n in [2..16]);

Редактирано от Ken (преглед на промените)

С малка корекция на Ken, използвай max, а не 16! Нали за това е константа.

repeat
Writeln('Vyvedete broq na redovete i stylbovete');
write('na kvadtratnata matrica (maksimalen broi ',max, '): '); readln(n);
if ( n > max ) or ( n < 2 ) then
begin
Writeln('Matricata trqbva da e s maksimum ',max,' i minimum 2 reda i stylba');
readln;
end;
until (n in [2..max]);

Редактирано от Q-tech (преглед на промените)

С малка корекция на Ken, използвай max, а не 16! Нали за това е константа.

repeat
Writeln('Vyvedete broq na redovete i stylbovete');
write('na kvadtratnata matrica (maksimalen broi ',max, '): '); readln(n);
if ( n > max ) or ( n < 2 ) then
begin
Writeln('Matricata trqbva da e s maksimum ',max,' i minimum 2 reda i stylba');
readln;
end;
until (n in [2..max]);

СУПЕР СТЕ :):wors: Задачата е готова за Отличен 6 :D само да питам тва последното дето Q-Tech го написа защо е нужно да използвам константата каква е разликата ?

СУПЕР СТЕ :):wors: Задачата е готова за Отличен 6 :D само да питам тва последното дето Q-Tech го написа защо е нужно да използвам константата каква е разликата ?

Ами за удобство (то затова ги има тези константи) :)

Като смениш стойността на max няма нужда да пренаписваш код. Така матрицата може да стане с максимум 1000 с една корекция.

Също би могъл да използваш константата (max) в дефиницията на масивите. Например:

var
      data : array [1..max, 1..max] of real;

Редактирано от Q-tech (преглед на промените)

Ами за удобство (то затова ги има тези константи) :)

Като смениш стойността на max няма нужда да пренаписваш код. Така матрицата може да стане с максимум 1000 с една корекция.

Също би могъл да използваш константата (max) в дефиницията на масивите. Например:

var
      data : array [1..max, 1..max] of real;

Ясноо ... ОЩЕ ВЕДНЪЖ БЛАГОДАРЯ НА ВСИЧКИ, КОИТО ВЗЕХА УЧАСТИЕ В СЪЗДАВАНЕТО И РЕДАКТИРАНЕТО НА МОЯТА ЗАДАЧА !!!!

НАЙ-ВЕЧЕ БЛАГОДАРЯ НА :

psycho_666 , който даде "трамплина" за скок.

tyrmyk , който редактира изцяло точка 3 от заданието.

Ken , който постоянно се отзоваваше на мойте не толкова компетентни въпроси.

Редактирано от enriko_ (преглед на промените)

  • 2 седмици по-късно...

Трябва да създам програма, която да определя средно аритметичното на тези елементи на масива, които са над главния диагонал и лежат в интервала [A-B] зададен от клавиатурата; да изведе на екрана броя на числата , отговарящи на интервала , тяхната сума и изчисленото средноаритметично.

таа аз съм написал следното, нооо съм го овъртял много много

writeln('Vyvedete nachalo na intervala A= ');
readln(a);
writeln('Vyvedete krai na intervala B= ');
readln(b);
for i:=1 to m do
for j:=1 to m do
if (D[i,j]>A) and (D[i,j]<B) then
d[i,j]:=s[i,j];
writeln('chislata koito sa v intervala sa ',s[i,j]);
sum:= s[i,j];
begin
if j>i then
sum:= sum + s[i,j];
srar := sum/m;
writeln('sumata na elementite e = ',sum:4);
writeln('srednata stoinoist e = ',srar:4:2);
end;
readln;
end.

Нямаш брояч за броя на тея числа, които ти отговарят на условията... Ти ги делиш на m, а това е съвсем различно число... Трябва да сложиш един брояч, например br, който при число, което отговаря на условията да се увеличи с 1 (br:=br+1) и тая команда да влезе още при самата проверка и да затвориш проверката с бегин и енд... if (D[i,j]>A) and (D[i,j]<B) then begin d[i,j]:=s[i,j]; br:=br+1; writeln('chislata koito sa v intervala sa ',s[i,j]); sum:= s[i,j]; end; И преди цялото това нещо трябва да нулираш брояча... writeln('Vyvedete nachalo na intervala A= '); readln(a); writeln('Vyvedete krai na intervala B= '); readln(b); br:=0; for i:=1 to m do for j:=1 to m do if (D[i,j]>A) and (D[i,j]<B) then Накрая променяш srar := sum/m на srar := sum/br и трябва да работи...

Редактирано от psycho_666 (преглед на промените)

хммм не се получава и така, защото след като въведа интервала ми дава грешка при Br като ми казва че на нула не се дели :О

writeln('Vyvedete nachalo na intervala A= '); readln(a); writeln('Vyvedete krai na intervala B= '); readln(b); br:=0; sum:=0; writeln('chislata koito sa v intervala sa: '); for i:=1 to m do for j:=1 to m do if (D[i,j]>A) and (D[i,j]<B) then if j>i then begin; br:=br+1; sum:= sum + D[i,j]; writeln(D[i,j]); end; srar := sum/br; writeln('sumata na elementite e = ',sum:4); writeln('srednata stoinoist e = ',srar:4:2); readln; end. Toва работи в случай, че имаш чилса, които отговарят на условието... 1. Ти извеждаш числата, които отговарят на условието още при проверката writeln(D[i,j]); 2. Това го правиш с командата sum:= sum + D[i,j]. сум в началото му давам стойност 0, при число, което отговаря на условията сум се увеличава със стойността на числото. 3. За това ти е броячя бр. Средноаритметично е сбора върху броя - srar := sum/br, а след като брояча е преброил колко са и им имаш сбора (sum) си готов - елементарната сметка я правиш в края и само изкарваш резултата... След такова объркване от моя страна (за което се извинявам) мисля че е това...

Малко спам, ама... Прословутата ми простотия да прочета поста и да напиша първото, което ми идва наум...

Зададена е областа D,като обединение на n затворени интервала с граници съответно ai и bi i=1,2,..,n.Зададени са и стойностите xj,j=1,2,...,m.Да се състави алгоритъм и напише програма за създаване на нов масив Y, съдържащ стойностите от масива X,лежащи вътре в областа D. В програмата да се използват масиви. Някои може ли а я направи

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.