Твой софтовый форум > Тематические форумы > Программирование

Помощь с pascal`ем

,

решение задач

Дата публикации: 17.12.2010 - 23:18
Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
kaMMarik
ОЁ чё я намутил!!! ну короче в тему только последняя читата, и после неё...код...


просто я ещё не разобрался куда тут на этом форуме тыкать =)

i Уведомление:
Уже поправил, а разобраться поможет этот раздел нашего форума.
SPiRiT
приветы!
по учебе не могу справиться с двумя задачами по Turbo Pascal.! может кто-нить может помоч мне, вообще никак задачи не пойму, уж больно сложно все это для меня, да так, что я ваще нулевой чета в них sad.gif

Решение задач с использованием индексированных переменных: МАССИВЫ И ВЕКТОРЫ.

Цитата | Quote
1. В Е К Т О Р Ы

1.11. CONST N=40;
            VAR X:ARRAY[1..N] OF INTEGER;
                Y,K:INTEGER; T:BOOLEAN;
            Переменной T присвоить значение TRUE, если в массиве
            Х нет нулевых элементов и при этом положительные эле-
            менты чередуются с отрицательными, и значение FALSE
            иначе.


Цитата | Quote
2. М А Т Р И Ц Ы

2.11. VAR A:ARRAY[1..8,1..10] OF INTEGER;
                B:ARRAY[1..8] OF BOOLEAN;
            по массиву А получить массив В, присвоив его k-му эле-
            менту значение TRUE, если выполнено указанное ниже ус-
            ловие, и значение FALSE - иначе: k-я строка массива А
            симметрична.



Заранее приогромнейшая благодарность! Если можно плиз, то и блок-схемы с меня тоже требуют sleep.gif
charodey_mag
Если все правильно понял то вот:
Code

//Задание 1.11
function Check111:boolean;
const N=40;
VAR X:ARRAY[1..N] OF INTEGER;
   Y,K:INTEGER; T:BOOLEAN;
begin
T:=true;
K:=0;
for Y:=1 to N do
 begin
 if X[N]=0 then
   begin
   T:=false;
   break;
   end;
 case k of
   0:if X[Y]>0 then K:=1 else K:=-1;
   1:if X[Y]<0 then K:=-1 else begin T:=false; break; end;
  -1:if X[Y]>0 then K:=1 else begin T:=false; break; end;
   end;
 end;
result:=T;
end;
//Задание 2.11
procedure Check211;
VAR A:ARRAY[1..8,1..10] OF INTEGER;
   B:ARRAY[1..8] OF BOOLEAN;
   i,k:integer;
   tb:boolean;
begin
for i:=1 to 8 do
 begin
 tb:=true;
 for k:=1 to 5 do
   if A[i,k]<>A[i,11-k] then
     begin
     tb:=false;
     break;
     end;
 B[i]:=tb;
 end;
end;


Блок схеиы рисовать ненавижу и поэтому не умею(((
SPiRiT
charodey_mag, вау! спасибо тебе огромное, щас оформлю все и попробую сдать!
Еще раз спасиба тебе!!!
SPiRiT
приветы!
вот на сдаче сессии не могу разобраться с лабораторной по Pascal на тему Массивы и индексированные переменные.

P.S отдельное спасибо charodey_mag за помощь в этой лабораторной!!!

Само задание выглядит так:
Цитата | Quote
{2.11. VAR A:ARRAY[1..8,1..10] OF INTEGER;
          B:ARRAY[1..8] OF BOOLEAN;
      по массиву А получить массив В, присвоив его k-му эле-
      менту значение TRUE, если выполнено указанное ниже ус-
      ловие, и значение FALSE - иначе: k-я строка массива А
      симметрична.}



я вот нарешал тут кой-чо, но это все как бы выходит недоделанно и как бы возможно соединить из нескольких программ в одну придется, только я не справлюсь с этим никак =(

сначала я сделал как процедуру, но это не вписалось в задание:
Code
procedure Check211;
VAR A:ARRAY[1..8,1..10] OF INTEGER;
  B:ARRAY[1..8] OF BOOLEAN;
  i,k:integer;
  tb:boolean;
begin
for i:=1 to 8 do
begin
tb:=true;
for k:=1 to 5 do
  if A[i,k]<>A[i,11-k] then
    begin
    tb:=false;
    break;
    end;
B[i]:=tb;
end;
end;


...потом из эту же процедуру переписал как программу, чтобы был вывод результата, но это опять не понравилось преподавателю и я так понял вывод результата не тут и не такой:
Code
program lab62;
uses crt;
VAR A:ARRAY[1..8,1..10] OF INTEGER;
  B:ARRAY[1..8] OF BOOLEAN;
  i,k:integer;
  tb:boolean;
begin
clrscr;
for i:=1 to 8 do
begin
tb:=true;
for k:=1 to 5 do
  if A[i,k]<>A[i,11-k] then
    begin
    tb:=false;
    break;
    end;
B[i]:=tb;
end;
writeln(tb);
end.


вот последний вариант переделанный мною уже получше, но тут не указана симметричность (k-я строка массива А симметрична):
Code
program lab62;
uses crt;
VAR A:ARRAY[1..8,1..10] OF INTEGER;
  B:ARRAY[1..8] OF BOOLEAN;
  i,k:integer;
  tb:boolean;
begin
clrscr;
for i:=1 to 8 do
begin
tb:=true;
for k:=1 to 5 do
  if A[i,k]<>A[i,11-k] then
    begin
    tb:=false;
    break;
    end;
B[i]:=tb;
end;
writeln(tb);
end.
charodey_mag
Может такой вариант пойдет
PS. От tb лучше вообще изавиться заменив его везде на B[i], это я чето не отом подумал
Code

program lab62;
uses crt;
VAR A:ARRAY[1..8,1..10] OF INTEGER;
 B:ARRAY[1..8] OF BOOLEAN;
 i,k:integer;
begin
clrscr;
for i:=1 to 8 do
begin
B[i]:=true;
for k:=1 to 5 do
 if A[i,k]<>A[i,11-k] then
   begin
   B[i]:=false;
   break;
   end;
if B[i] then
 writeln(i,' строка симметрична')
else
 writeln(i,' строка асимметрична');
end;
readln;
end.


SPiRiT
Еще раз большое тебе спасибо за помощь!
я там по-другому сделал, просто для проверки 5-ую строку симметричной!
SPiRiT
Поможите пожалуйста решить две несчастные задачки:

СТАНДАРТНЫЙ ТИП STRING
МОДУЛЬ STRINGS

Цитата | Quote
11.Дана последовательность, состоящая из 10 слов. Напечатать
все слова последовательности, удалив из каждого слова
нечётные буквы, если слово имеет нечётное количество
символов.



М Н О Ж Е С Т В А
Цитата | Quote
11. TYPE пpодукт = (хлеб, масло, мясо, pыба, соль, сыp,
                              колбаса, сахаp, чай, кофе);
            ассоpтимент = set of пpодукт;
            магазины = array [1..20] of ассоpтимент;
Описать пpоцедуpу "Наличие(Маг,А,В,С)", котоpая по инфоp-
мации из массива Маг типа магазины ( Маг[i] - это множес-
тво пpодуктов, имеющихся в i-м магазине ) пpисваивает
паpаметpам А,В и С типа ассоpтимент следующие значения:
А - множество пpодуктов, котоpые есть во всех магазинах;
В - множество пpодуктов, каждый из котоpых есть хотя бы в
одном магазине;
С - множество пpодуктов, котоpых нет ни в одном магазине.
charodey_mag
Первая
Code

function ParseStr(source:string):string;
var i,j,k,len:integer;
   ts:string;
begin
result:='';
for i:=1 to 10 do //10 ñëîâ
 begin
 k:=pos(' ',source);
 if k<>0 then
   begin
   ts:=copy(source,1,k-1);
   Delete(source,1,k);
   end
 else
   if i=10 then
     ts:=source
   else
     begin
     //меньше 10 слов !!!
     exit;
     end;
 len:=Length(ts);
 if (len and $01)<>0 then
   begin
   for j:=1 to len do
     if (j and $01)=0 then
       result:=result+ts[j];
   result:=result+' ';
   end
 else
   result:=result+ts+' ';
 end;
end;

Вторая
Code

procedure Presence(Mag: TMagazin;var A,B,C:TAssortiment);
var i:integer;
begin
A:=[pHleb,pMaslo,pMyaso,pSol,pSir,pKolbasa,pSahar,pChay,pKofe];
C:=A;
for i:=1 to 20 do
 begin
 A:=A*Mag[i];
 B:=B+Mag[i];
 C:=C-Mag[i];
 end;
end;


PS.
(len and $01)<>0
В двоичной системе число заканчивающееся на 1 всегда не четное. Хотя я думаю это и так понятно.
SPiRiT
О, огромное спасибо! Тока нужно было чуточку без функций и процедур - попроще =)))
Pages: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Помощь с pascal`ем
SoftoRooM © 2004-2024