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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

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

Featured Replies

искам да помоля за помощ някои който разбира от паскал защото проспах последните няколко часа за масиви в училище и нямам никаква представа как ще се реши следната задача: :)

Дадени са два едномерни масива М(15) и К(10). Да се получи нов масив В(12), чиито елементи се получават като за първите седем елемента на новия масив се прехвърлят стойностите на елементите от масив М , които са с четни индекси. Останалите пет елемента от масив В се получават като се прехвърлят стойностите на масив М които са с нечетни индекси. Да се изведе не екран новополучения масив В(12).

Задачата ми трябва за утре много благодаря предварително ако някои може да ми помогне :)

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

Нещо такова ?

program c17;

var m:array[1..15]of byte;
	k:array[1..10]of byte;
	b:array[1..12]of byte;
	i:byte;

Begin
  writeln('Enter M(15)');
  for i:=1 to 15 do readln(m[i]);

  writeln('Enter K(10)');
  for i:=1 to 10 do readln(k[i]);

  for i:=1 to 7 do b[i]:=m[i*2];

  for i:=1 to 5 do b[i+7]:=k[i*2-1];

  writeln('This is B(12)');
  for i:=1 to 12 do writeln(b[i]);
End.

..станалите пет елемента от масив В се получават като се прехвърлят стойностите на масив М които са с нечетни индекси.

Позволил съм си да предположа че говориш за масив К. Иначе няма какво да го правим в програмата.

Нещо такова ?

program c17;

var m:array[1..15]of byte;
	k:array[1..10]of byte;
	b:array[1..12]of byte;
	i:byte;

Begin
  writeln('Enter M(15)');
  for i:=1 to 15 do readln(m[i]);

  writeln('Enter K(10)');
  for i:=1 to 10 do readln(k[i]);

  for i:=1 to 7 do b[i]:=m[i*2];

  for i:=1 to 5 do b[i+7]:=k[i*2-1];

  writeln('This is B(12)');
  for i:=1 to 12 do writeln(b[i]);
End.

Позволил съм си да предположа че говориш за масив К. Иначе няма какво да го правим в програмата.

мерси много за помощта (предполагам че има грешка в условието което са ми дали)

Здравей, радвам се че си написал по-голямата част. Ще те помоля да използваш опцията за публикуване на код във форума. По този начи се избягва автоматичното фоматиране, което разваля изгледа на програмата. Също така е добре да кажеш за кога ще ти трябва. По същество program zadachka zakachka; е невалиден ред. Трябва да използваш една дума след програм, без интервали, евентуално може да има _ и задължително да започва с буква. В условието е казано че променливите са целочислени - би трябвало да използваш A : array[1..MAX,1..MAX] of Integer; , с което ще изпълниш условието да е в обхвата (-500 ; 500). Също така ще използваш много по-малко памет. За for -овете може да ползваш byte. Може би ще я разгледам по-подробно довечера, дотогава може да я корегираш малко :) .

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

1. По условие трябва да се използват подпрограми??? Може би процедури?

Би трябвало да изглежда така:

Procedure Author();
begin
  Writeln('|-----------------------------------------------------------------------------|');
  Writeln('| Boby |');
  Writeln('|-----------------------------------------------------------------------------|');
  Writeln;
end;

Procedure Conditions();
begin
  Write('Uslovie na zada4ata : Da se sastavi programa za obrabotka na masiva A [N, N]');
  ....
end;

begin
  Author();
  Conditions();
  ....
end.

2. Иска се масива C да е с максималните елементи на от всяка колона на масива А

Function CreateArrayC( Var Arr[1..MAX,1..MAX] of Real) : Array[1..MAX] of Real;
  var  i, j : integer;
  var Ret : Array [1..MAX] of Real
begin
  for i=1 to MAX
  begin
	Ret[i]=-500;
	for j:=1 to MAX
	begin
	  if( Ret[i]<A[i,j]) then
		Ret[i]=A[i,j]
	end;
  CreateArrayC = Ret;
end;

begin
  ...
  C = CreateArrayC( A );
  ...
end.

3. На константа (MAX) не може да се присвоява стойност в последствие.

4. Това е само подсказка, може и да не работи точно.

5. Моля те, използвай отмествания и BB кода за програмен код!

Съжалявам не се съобразих да я пусна като код. Не съм се занимавал с паскал от доста време, може би 4 и повече години и много от нещата не си ги спомням, програмката ми трябва за утре Публикувано изображение . Благодаря ви отново

program zadachka_zakachka;
uses Crt;
const
  MAX = 10;
var
  n : Integer;
  i, j, i_min, k : Integer;
  A : array[1..10,1..10] of Real;
  C : array[1..10] of Real;
  temp_val : Real;
  Flag : Boolean;
begin
  ClrScr;
  Writeln('|-----------------------------------------------------------------------------|');
  Writeln('|						   Boby						 |');
   Writeln('|-----------------------------------------------------------------------------|');
   Writeln;
  Write('Uslovie na zada4ata : Da se sastavi programa za obrabotka na masiva A [N, N]');
  Writeln('kadeto dannite sa tzeli chisla v intervala [-500, 500].');
  Write('Da ima saotvetnite podprogrami: ');
  Writeln('-otpechatvane na uslovieto na zadachata');
  Writeln('-otpechatvane avtora na zadachata');
  Writeln('-otpechatvane na vhodnite danni');
  Writeln('a : da se obrazuva ednomeren masiv C [N], elementite na koito sa maksimalnite elementi ot vsjaka kolona na masiva A');
  Writeln('b : poluchenijat masiv da se sortira po golemina');
  Writeln('-otpechatvane na poluchenite rezultati sled obrabotka A i sled obrabotka B');
  Writeln('-rezultata da se zapishe vav file sas ime MAXR.dat');
  Writeln;
  Writeln('****************************************************************************
');
  Writeln;
  Write('Vuvedete goleminata (broq redove i stylbove) na masiva (maksimalno ', MAX, '): '); Readln(n);
  Writeln;
  Writeln('Vuvejdane na elementite na matricata A[N,N] : ');
  for i := 1 to n do
	 for j := 1 to n do
	 begin
		repeat
		   Write('A[',i,',',j,'] = '); Readln(A[i,j])
		until (A[i,j] >= -500) and (A[i,j] <= 500)
	 end;
  Writeln;
  Writeln('****************************************************************************
');
  Writeln('Vuvedohte slednata matritza [',n,',',n,']:');
  for i := 1 to n do begin
	 Write('| ');
	 for j := 1 to n do
		Write(A[i,j]:8:2);
	 Writeln(' |');
  end;
  Writeln;
  {Obrazuvane na ednomernija masiv C[N]}
  k := 0;
  for i := 1 to n do
	 for j := 1 to n do
		if i > j then
		begin
		   k := k + 1;
		   c[k] := A[i,j];
		end;
  Writeln;
  Writeln('****************************************************************************
');
  Writeln('matritzata C[',n,'] predi sortiraneto:');
  for i := 1 to k do
	 Writeln('C[', i,'] = ', c[i]:8:2);
{Sortirane na masiva C[N]}
  repeat
	 Flag := true;
	 for i := 1 to k - 1 do
		if C[i] > C[i+1] then
		begin
		   Flag := false;
		   temp_val := C[i];
		   C[i] := C[i+1];
		   C[i+1] := temp_val;
		end;
  until Flag;
  Writeln;
  Writeln('****************************************************************************
');
  Writeln('Sortiranata matritza C[',n,'] :');
  for i := 1 to k do
	 Writeln('C[', i,'] = ', c[i]:8:2);
  Readln
end.

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

Още едно предимство - ако декларираш

.....

A : array[1..10,1..10] of Integer;

C : array[1..10] of Integer;

Можеш да преобразуваш редовете writeln от този вид Writeln('C[', i,'] = ', c:8:2); в този Writeln('C[', i,'] = ', c);

Форматните спецификатори отпадат.

И още нещо - изтрий поне единия вариант на програмата, защото зае цяла страница :eek:

Успях да оправя сортирането май :), но за синтаксиса при записването във file нищо не си спомням

program zadachka_zakachka;
uses Crt;
const
  MAX = 10;
var
  n : Integer;
  i, j, i_min, k : Integer;
  A : array[1..10,1..10] of Real;
  C : array[1..10] of Real;
  temp_val : Real;
  Flag : Boolean;
begin
  ClrScr;
  Writeln('|-----------------------------------------------------------------------------|');
  Writeln('|						   Boby						 |');
   Writeln('|-----------------------------------------------------------------------------|');
   Writeln;
  Write('Uslovie na zada4ata : Da se sastavi programa za obrabotka na masiva A [N, N]');
  Writeln('kadeto dannite sa tzeli chisla v intervala [-500, 500].');
  Write('Da ima saotvetnite podprogrami: ');
  Writeln('-otpechatvane na uslovieto na zadachata');
  Writeln('-otpechatvane avtora na zadachata');
  Writeln('-otpechatvane na vhodnite danni');
  Writeln('a : da se obrazuva ednomeren masiv C [N], elementite na koito sa ');
  Writeln('maksimalnite elementi ot vsjaka kolona na masiva A');
  Writeln('b : poluchenijat masiv da se sortira po golemina');
  Writeln('-otpechatvane na poluchenite rezultati sled obrabotka A i sled obrabotka B');
  Writeln('-rezultata da se zapishe vav file sas ime MAXR.dat');
  Writeln;
  Writeln('****************************************************************************
');
  Writeln;
  Write('Vuvedete goleminata (broq redove i stylbove) na masiva (maksimalno ', MAX, '): '); Readln(n);
  Writeln;
  Writeln('Vuvejdane na elementite na matricata A[N,N] : ');
  for i := 1 to n do
	 for j := 1 to n do
	 begin
		repeat
		   Write('A[',i,',',j,'] = '); Readln(A[i,j])
		until (A[i,j] >= -500) and (A[i,j] <= 500)
	 end;
  Writeln;
  Writeln('****************************************************************************
');
  Writeln('Vuvedohte slednata matritza [',n,',',n,']:');
  for i := 1 to n do begin
	 Write('| ');
	 for j := 1 to n do
		Write(A[i,j]:8:2);
	 Writeln(' |');
  end;
  Writeln;
  {Obrazuvane na ednomernija masiv C[N]}
	 for i := 1 to n do
 begin
   C[i]:=-501;
	for j := 1 to n do
	 if a[j,i]>C[i] then
	C[i] := A[j,i];
  end;
Writeln;
Writeln('***************************************** ************************************');
Writeln('matritzata C[',n,'] predi sortiraneto:');
 for i := 1 to n do
  Writeln('C[', i,'] = ', c[i]:8:2);
{Sortirane na masiva C[N]}
 repeat
  Flag := true;
   for i := 1 to n - 1 do
	if C[i] > C[i+1] then
  begin
	Flag := false;
	temp_val := C[i];
   C[i] := C[i+1];
   C[i+1] := temp_val;
  end;
 until Flag;
Writeln;
Writeln('***************************************** ************************************');
Writeln('Sortiranata matritza C[',n,'] :');
 for i := 1 to n do
 Writeln('C[', i,'] = ', c[i]:8:2);
 Readln
end.

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

Това е добре. И аз я захванах и стигнах точно до там. Само че мойта е на процедури, а и реших проблемът с извеждането в табличен формат :rolleyes: . След около час ще сверим резултатите.

супер, тази програмка ме измъчи вчера и днес, ама това да ми е за урок като уча нещо после да си пазя записките :rolleyes:

Ето я.

Имай впредвид че я писах доста на бързо, така че си я преработи както ти харесва. Повечето време съм се придържал към твойта реализация.

Накрая записвам във файла само сортирания масив C. В задачата май се иска всичко да се запише в MAXR.dat.

Program widespread;

Const max=10;

Var  a:array[1..max,1..max] of integer;
	 c:array[1..max] of integer;
	 n:byte;
	 

  procedure uslovie;
  begin
	Write('Uslovie na zada4ata : Da se sastavi programa za obrabotka na masiva A [N, N]');
	Writeln('kadeto dannite sa tzeli chisla v intervala [-500, 500].');
	Write('Da ima saotvetnite podprogrami: ');
	Writeln('-otpechatvane na uslovieto na zadachata');
	writeln('-otpechatvane avtora na zadachata');
	writeln('-otpechatvane na vhodnite danni');
	writeln('a : da se obrazuva ednomeren masiv C [N], elementite na koito sa maksimalnite elementi ot vsjaka kolona na masiva A');
	writeln('b : poluchenijat masiv da se sortira po golemina');
	writeln('-otpechatvane na poluchenite rezultati sled obrabotka A i sled obrabotka B');
	writeln('-rezultata da se zapishe vav file sas ime MAXR.dat');
	writeln;
  end;
  
  procedure autor;
  begin
  writeln('|-----------------------------------------------------------------------------|');
  writeln('|						   Boby						 |');
  writeln('|-----------------------------------------------------------------------------|');
  writeln;
  end;

  procedure entermatrix;
  var i,j:byte;
  begin
  writeln;
  repeat
	write('Vuvedete goleminata (broq redove i stylbove) na masiva (maksimalno ', max, '): ');
	readln(n);
  until (n<=max) and (n>0);
  writeln;
  writeln('Vuvejdane na elementite na matricata A[N,N] : ');
  for i:= 1 to n do
	for j:= 1 to n do
	  repeat
		write('A[',i,',',j,'] = '); 
		readln(A[i,j]);
	  until (A[i,j] > -501) and (A[i,j] < 501);	
  end;

  procedure displaymatrix;
  var i,j:byte;

  begin
  writeln('Vuvedohte slednata matritza [',n,',',n,']:');
  for i := 1 to n do
	begin
	write('|');
	  for j := 1 to n do
		if a[i,j]>99 then write(a[i,j],'  |')
		  else if a[i,j]>9 then write(a[i,j],'   |')
			else if a[i,j]<-99 then write(a[i,j],' |')
			  else if a[i,j]<-9 then write(a[i,j],'  |')
				else if a[i,j]<0 then write(a[i,j],'   |')
				  else write(a[i,j],'	|');
	  writeln;
	end;
  end;

  procedure initializec;
  var i,j:byte;
  begin
  for i := 1 to n do
	begin
	  c[i]:=-501;
	  for j := 1 to n do
		if a[j,i]>c[i] then c[i]:=a[j,i];
	end;
  
  end;
 
  procedure printc;
  var i:byte;
  begin
  for i:=1 to n do write(c[i],' ');
  writeln;
  end;

  procedure sortc;
  var i,j:byte;
	  flag:boolean;
	  temp_val:integer;
  begin
  repeat
  Flag := true;
   for i := 1 to n - 1 do
	if C[i] > C[i+1] then
	  begin
	  Flag := false;
	  temp_val := c[i];
	  c[i] := C[i+1];
	  c[i+1] := temp_val;
	  end;
  until Flag;
  end;

  procedure writefile;
  var i:byte;
	  outfile:text;

  begin
  assign(outfile,'MAXR.dat');
  rewrite(outfile);
  for i:=1 to n do write(outfile,c[i],' ');
  writeln(outfile);
  close(outfile);
  end;

Begin
  writeln('Hey !');
  uslovie;
  autor;
  entermatrix;
  displaymatrix;
  initializec;
  writeln('C predi sortirraneto...');
  printc;
  sortc;
  writeln('C sled sortirraneto...');
  printc;
  writefile;
End.

търсих навсякъде из форума,но не мога да намеря решение на тази задача: Даден е А[18]. Да се сравни стойността на А[9] с числото В, което се въвежда от клавиатурата. Ако В<=А[10] да се изведат на печат всички елементи с четен индекс, ако не- всички елементи с индекс от 3 до 13. Моля някои да ми даде точно решение защото нямам никаква представа как ще стане :wors:

търсих навсякъде из форума,но не мога да намеря решение на тази задача:.....

Уоу, ако намериш универсален пищов ми се обади. Много ми трябва по математика.

Даден е А[18]. Да се сравни стойността на А[9] с числото В, което се въвежда от клавиатурата. Ако В<=А[10] да се...

Добре, ама A[9], или A[10] ще сравняваме. Или и двете. Май-май пак има грешка в условието :rolleyes: .

Уоу, ако намериш универсален пищов ми се обади. Много ми трябва по математика.

Добре, ама A[9], или A[10] ще сравняваме. Или и двете. Май-май пак има грешка в условието :rolleyes: .

ами да кажем че ще сравняваме А[9] наистина незнам кои ги е писал тези условия но така ми ги дават

аз също се чудех но реших че вече съвсем съм зациклила и не разбирам :)

ами да кажем че ще сравняваме А[9] наистина незнам кои ги е писал тези условия но така ми ги дават

аз също се чудех но реших че вече съвсем съм зациклила и не разбирам :yanim:

program c18;

var a:array[1..18]of byte;
	i,b:byte;

Begin
  writeln('Enter A(18)');
  for i:=1 to 18 do readln(a[i]);

  writeln('Enter B');
  readln(b);

  if b<=a[9] then for i:=1 to 9 do writeln(a[i*2]) else for i:=3 to 13 do writeln(a[i]);
End.
  • 2 седмици по-късно...

Здравейте Аз имам по голям проблем със задачата. Моита задаче е по сложна защото е за курсова работа. Затова ще съм много благодарен ако някой се отзове и ми помогне. Благодаря предварително. Това е задачата Текстовият файл Niz.inp има единствен ред съдържащ низа S. Да се състави програма, която всяко срещане на цяло число без знак, което е степен на тройката, заменя с 3**степента.Напримет, ако S има вида qwert27rty81q4as, след преобразуването S трябва да приеме вида, qwert3**3rty3**4q4as. Да се изведе на екрана новият файл. Ного ще ме зарадвате ако знаете как се решава :whist:

Може и да помисля по въпроса. Добре е и ти да напишеш нещо. Каквото и да е, е по-добре от нищо. Например прочети низа от файла в променливата S. За кога ти трябва задачата ?

Да, няма да е проблем. Утре няма да мога нищо да направя, но до Неделя мисля че ще съм я написал.

Ако можеш да я напишиш ще съм ти ного благодарен. Ако си от Благоевград мога и да пе черпа нещо. И пак благодаря ;)

program verystring;

var b,d,i,j:byte;
	inp,outp,numsum,charsum:string;
	l:longint;
	f:text;

Begin

writeln('Reading file...');
assign(f,'Niz.inp');
reset(f);
readln(f,inp);
close(f);

outp:='';
numsum:='';
charsum:='';
d:=length(inp);
i:=0;

if d>0 then
  repeat
  i:=i+1;
  b:=ord(inp[i]);
  if (b>47) and (b<58) then numsum:=numsum+inp[i] else charsum:=charsum+inp[i];
  if (numsum<>'')and( (i=d) or (b<48) or (b>57) ) then 
	begin
	val(numsum,l,b);
	  if b<>0 then 
		begin
		writeln;
		write('Number: ');
		write(numsum);
		writeln(' is too big for calculation. Skipped!');
		writeln;
		end
	  else
		if l=1 then numsum:='3**0' else
		  begin
		  j:=0;
			repeat
			j:=j+1;
			b:=l mod 3;
			l:=l div 3;
			until (l<2) or (b<>0);
		  if (b=0) and (l=1) then 
			begin
			str(j,numsum);
			insert('3**',numsum,1);
			end;
		  end;
	outp:=outp+numsum;
	numsum:='';
	end;
  outp:=outp+charsum;
  charsum:='';
  until i=d
else writeln('Nothing to do!');

writeln(outp);

End.

Това е. Огледай и я пробвай, би трябвало всичко да е ок. Питай, ако нещо не ти е ясно. Може и да не е максимално оптимизирана и много добре защитена. Особено частта с файла, но тя вече зависи от ОС и неща да се занимавам/престаравам...

От София съм. Все пак благодаря за предложението :clap: !

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

program c761;

var
   min,max,aa : real;
   broi, i	: integer;

begin
  Write('Broi na 4islata: ');
   ReadLn(Broi);

	Write('Vavedi 4ilso:');
	 ReadLn(Min);
	  Write('Vavedi 4islo:');
	   ReadLn(Max);
		if Min > Max then
					   begin
						 aa := Min;
						  Min := Max;
						   Max := aa;
					   end;

		   for i := 3 to broi do
			begin
			  Write('Vavedi 4islo:');
			   ReadLn(aa);
				if AA > Max then Max := AA;
				 if AA < Min then Min := AA;
			end;

	 AA := Min + Max;
	WriteLn('Result: ',AA:0:2);
end.

Write('Broi na 4islata: ');
   ReadLn(Broi);
Изписва на екрана Broi na 4islata: , след това се прочита Broi от клавиатурата.

Write('Vavedi 4ilso:');
	 ReadLn(Min);
	  Write('Vavedi 4islo:');
	   ReadLn(Max);
Изписва на екрана Vavedi 4ilso: , след това се прочитат Min от клавиатурата. Същото се повтаря за Max.

if Min > Max then
					   begin
						 aa := Min;
						  Min := Max;
						   Max := aa;
					   end;

Ако Min е по-голямо от Max стойностите се разменят. Това става с помощната променлива aa.

Първо на aa се присвоява Min, след това на Min - Max. Накрая на Max се присвоява aa.

Целта е Min да е по-малко от Max или поне да са равни. Освен това се изгражда база за сравнение с останалите въведени числа. Тоест Min и Max придобиват някакви смислени начални стойности.

for i := 3 to broi do
			begin
			  Write('Vavedi 4islo:');
			   ReadLn(aa);
				if AA > Max then Max := AA;
				 if AA < Min then Min := AA;
			end;

Това е същинската част от задачата. Изписва се Vavedi 4islo:, след което се прочита aa от клавиатурата.

Ако АА е по-голямо от Max, тогава в Max се записва стойността на АА. Точно за да се извърши това сравнение беше важно да има смислена стойност в Max. Затова прочетохме Min и Max в предишния блок.

След това се сравнява АА с Min и ако AA е по-малко от Min, стойността на AA се прехвърля в Min. По този начин в Min остава най-малкото число въведено от клавиатурата, а в Max най-голямото.

Всичко това се повтаря толкова пъти колкото е задал потребителя. От 3 до стойността на променливата broi.

Ако broi съдържа стойност по-малка от 3 цикълът няма да се ипълни нито веднъж. Понеже след for i := 3 to broi do може да се изпълни само един оператор, са използван блок begin и end.

AA := Min + Max;
	WriteLn('Result: ',AA:0:2);

На AA се присвоява сборът от Min с Max.

На екранът се изписва AA.

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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