Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 20:05   #1
Dobrota
Новичок
Джуниор
 
Регистрация: 17.03.2013
Сообщений: 3
Восклицание Задача по Паскалю. Вопрос..

пожалуйста помогите, что означает выделенное красным?...
Паскаль..

Код:
program lab2;
    uses crt;
    var  wrd,  b, s:string;
      
       A:array [1..256, 1..256] of integer;
       dl_sl,sum,m,k,j,i, p,x,f:integer;
	   ch:char;
	   
	function checkstr(var arg:string;c:char):boolean;
		var
		i:integer;
		st:string;
		begin
		checkstr:=true;
			  st:='';
			  for i:=1 to length(arg) do
				if arg[i]<>' ' then
				  st:=st+arg[i]
				else begin
				  if pos(c,st)=0 then begin
					checkstr:=false;
					break;
				  end;
				  st:='';
				end;
			end;   

	   
    begin  clrscr;
	repeat
        writeln ('Menu:');
        writeln ('1. Vvod simvolnoi stroki');
        writeln ('2. Obrabotka stroki s vivodom resultata');
        writeln ('3. vvod dvumernogo massiva');
        writeln ('4. obrabotka dvumernogo massiva s vivodom resultata');
        writeln ('5. Exit');
        writeln;
        writeln('viberite punkt');
       
              readln (x);
              case x of
              1:begin
			  writeln('enter the string:');
              readln(s); 
			  end;
              2:begin
			  writeln('enter the letter');
				readln(ch);
				if s[length(s)]<>' ' then
				s:=s+' ';
				if pos(ch,s)=0 then
				writeln('this sentence doesnt contain the letter ',ch)
				else
					if checkstr(s,ch) then
					writeln('letter ',ch,' in each word')
					else
					writeln('letter ',ch,' isnt in each word');
					readln
					end;

              3:begin 
			  write('kol-vo strok i stolbcov matrici = ');
              readln(m);
              for i:=1 to m do
                for j:=1 to m do
                begin
                write ('a[',i,',',j,']=');
                readln(A[i,j]);
                end;
                end;
              4:begin 
			  writeln('nasha matrica:');
                    for i:=1 to m do  begin
                    writeln();
                        for j:=1 to m do

                        write (a[i,j],' ');
                    end;
                    sum:=0;
                    for i:=1 to m do
                    for j:=1 to m do
                    if i=j then sum:=sum+a[i,j];
                    write ('summa diagonali ravna ');
                    writeln(sum);
                    end;

              5: begin
			  writeln('1. Vihod');
              writeln('2. Otmena');
              readln(x);
              if x=1 then exit;
              if x=2 then continue;   
				 writeln(' ');
                 writeln('Viberite punkt menu: ');
				 end;
				 end;
                 until x=5;
				
                
                     end.

Последний раз редактировалось Dobrota; 17.03.2013 в 20:49.
Dobrota вне форума Ответить с цитированием
Старый 17.03.2013, 21:33   #2
DrStrangeLove
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 56
По умолчанию

1.

Код:

2:begin
			  writeln('enter the letter');
				readln(ch);
				if s[length(s)]<>' ' then
				s:=s+' ';
				if pos(ch,s)=0 then
				writeln('this sentence doesnt contain the letter ',ch)
				else
					if checkstr(s,ch) then
					writeln('letter ',ch,' in each word')
					else
					writeln('letter ',ch,' isnt in each word');
					readln
					end;
Здесь если пробельный символ не является последним символом, то он (пробельный символ) добавляется к последнему символу строки.. (это делается для того чтобы внутри функции checkstr() мы смогли бы

обработать последнее слово строки, выполнив
Код:
 if pos(c,st)=0 then begin
					checkstr:=false;
					break;
				  end;

)

Далее идёт проверка есть ли буква вообще в строке или нет. Если нет так и говорим 'this sentence doesnt contain the letter '

Если же хоть одна эта буква в строке есть, то запускаем функцию checkstr(s,ch) которая определит в каждом ли слове у нас есть эта буква или не в каждом (в одном, в двух и тд. НО НЕ ВО ВСЕХ)


2.

Код:
function checkstr(var arg:string;c:char):boolean;
		var
		i:integer;
		st:string;
		begin
		checkstr:=true;
			  st:='';
			  for i:=1 to length(arg) do
				if arg[i]<>' ' then
				  st:=st+arg[i]
				else begin
				  if pos(c,st)=0 then begin
					checkstr:=false;
					break;
				  end;
				  st:='';
				end;
			end;
Здесь:

checkstr:=true; - Сперва делаем допущение, что у нас в каждом слове есть эта буква (если не так то изменим потом на false)

st:=''; Заводим пустую строку, куда будем класть слова из нашей исходной строки

Код:
for i:=1 to length(arg) do
				if arg[i]<>' ' then
				  st:=st+arg[i]
				else begin
				  if pos(c,st)=0 then begin
					checkstr:=false;
					break;
				  end;
				  st:='';
				end;
Проходимся по нашей исходной строке собирая слова в переменную st.. как только arg[i]<>' ' меняется на arg[i]=' ' (пробел) значит слово получено и выполняем pos(c,st)=0 -ищем в нём букву с - если не находим то гарантированно во всех словах у нас этой буквы не будет поэтому выполняем
Код:
checkstr:=false;
break;
меняя ложное допущенное значение результирующей переменной checkstr на правильное!

Если находим букву в слове, то вместо

Код:
checkstr:=false;
break;
выполняем st:=''; "обнуляя" переменную st для другого слова к которому переходишь по циклу... В конце цикла если не разу не выполнится

Код:
checkstr:=false;
break;
то значит вернётся checkstr:=true; (верное изначальное допущение)

3.

Код:
3:begin 
			  write('kol-vo strok i stolbcov matrici = ');
              readln(m);
              for i:=1 to m do
                for j:=1 to m do
                begin
                write ('a[',i,',',j,']=');
                readln(A[i,j]);
                end;
                end;
Формируем двухмерный массив- матрицу в зависимости от количества строк и столбцов, введённых пользователем..
Заносим в ячейки матрицы значения с клавиатурного ввода, предварительно указав (write ('a[',i,',',j,']=')) в какую именно ячейку будет делаться ввод...

Последний раз редактировалось DrStrangeLove; 17.03.2013 в 21:47.
DrStrangeLove вне форума Ответить с цитированием
Старый 17.03.2013, 21:59   #3
Dobrota
Новичок
Джуниор
 
Регистрация: 17.03.2013
Сообщений: 3
По умолчанию

благодарю))
Dobrota вне форума Ответить с цитированием
Старый 17.03.2013, 22:01   #4
DrStrangeLove
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 56
По умолчанию

Надеюсь всё понятно?)
DrStrangeLove вне форума Ответить с цитированием
Старый 17.03.2013, 22:05   #5
Dobrota
Новичок
Джуниор
 
Регистрация: 17.03.2013
Сообщений: 3
По умолчанию

ну тааааак)
Dobrota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# поиск файлов, ничего не понимаю zhenka619 C# (си шарп) 1 19.08.2012 10:58
задача,сама ничего не понимаю на асемблере........... koshechka91 Помощь студентам 0 12.12.2011 10:57
Ничего не понимаю!!! sermog Помощь студентам 9 14.03.2011 12:02
Помогите решить!Ничего не понимаю в информатике! felice Паскаль, Turbo Pascal, PascalABC.NET 3 03.02.2008 14:54