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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2008, 21:52   #1
xxBOBAHxx
 
Регистрация: 19.10.2008
Сообщений: 7
По умолчанию Одномер. и двумер. массивы(Pascal)

№1.Создать массив целых чисел R[1..N], содержащий серии чисел, разделенных нулями. Отсортировать массив по возрастанию сумм чисел в сериях.

Т.е. например дан массив
1 2 3 0 -1 2 3 0 6 7 3 0 3 3 3
данный массив нужно преобразовать по возрастанию сумм в сериях , чтоб получилось следующее:
-1 2 3 0 1 2 3 0 3 3 3 0 6 7 3


МОИ мысли по этой задаче:

uses crt;
const n=20;
var nach:array[1..n+1] of integer;
a,s, g:array[1..n] of integer;
i, j, h, k, c,gh, l :integer;
priz:boolean;
begin clrscr;
randomize;
for i:=1 to n do
begin a[i]:=-5+random(10);
write(a[i], ' ');
end;
writeln;
i:=0; j:=0;
repeat
inc(j); s[j]:=0;
nach[j]:=i+1;
???????????
repeat
inc(i);
s[j]:=s[j]+a[i];
until (a[i]=0) or (n=i);
writeln(s[j], '=б㬬* ', j);
until n=i;
k:=j;
gh:=j;
repeat dec(k);
priz:=true;
for j:=1 to k do
if s[j]>s[j+1] then begin
c:=s[j];
s[j]:=s[j+1];
s[j+1]:=c;
l:=nach[j];
nach[j]:=nach[j+1];
nach[j+1]:=l;
priz:=false;
end;
until priz;
writeln;
for h:=1 to gh do
write(nach[h],' ');
readkey;
end.

p.s. Там где стоит знак ? нужно дополнить.....ну я так думаю.....

№2. Построено N домов по M квартир в каждом доме. Сформировать матрицу А[N*M], где записать метраж каждой квартиры, в матрицу В записать число проживающих в каждой квартире. Создать массив С, где будет указано число квартир каждого дома, где на одного проживающего приходится менее 7 метров.


Свои мысли по поводу этой задачи выложу чуть позже.....
xxBOBAHxx вне форума Ответить с цитированием
Старый 27.10.2008, 01:15   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

вот моё решение первой.....

Код:
const N=20;
type
 seriya=record {тип для одной серии}
        nach,kon:integer; {начало и конец серии}
        sum:longint; {сумма элементов}
 end;

var series:array[1..N] of seriya; {Массив серий}
    temp:seriya;
    a:array[1..N] of integer; {основной массив}
    count,CountS:integer;
    i,j:integer;
    check:boolean;

begin
 writeln('Input N:');
 readln(count); {вводится ко-во}
 CountS:=1;
 series[1].nach:=1; {первая серия начинается с первого элемента}
 for i:=1 to count do
  begin
   readln(a[i]); {вводится очередной элемент}
   if(a[i]=0) then
    begin
     series[CountS].kon:=i-1;   {если введён 0 то записать конец для текущей серии....}
     inc(CountS);               {....увеличить счетчик серии.....}
     series[CountS].nach:=i+1;  {....записать начало очередной серии}
    end
    else series[CountS].sum:=series[CountS].sum+a[i]; {если введен не 0 то к сумме текущей серии добавить этот элемент}
  end;
 series[CountS].kon:=count; {Записываем конец последней серии}

{Сортируем пузырьком массив серий}
 check:=true;
 while(check) do
 begin
  check:=false;
  for i:=2 to CountS do
   if series[i-1].sum>series[i].sum then
    begin
     temp:=series[i-1];
     series[i-1]:=series[i];
     series[i]:=temp;
     check:=true;
    end;
 end;

{Выводим серии в том порядке вкотором они в массиве}
 for i:=1 to CountS do
  begin
   for j:=series[i].nach to series[i].kon do
    write(a[j]:3);
   if i<CountS then write(0:3);
  end;

 readln;
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 27.10.2008, 11:53   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот мои мысли по второй.
Код:
uses crt;
const n=5; {5  8-и квартирных домов}
        m=8;
var a,b:array[1..n,1..m] of byte;
     c:array[1..n*m] of byte;
     i,j,k:byte;
begin
clrscr;
randomize;
writeln('Матрица метражей:');
for i:=1 to n do
  begin
    for j:=1 to m do
      begin
        if (j=1)or(j=m)or(j=m div 2)or(j=m div 2+1) then a[i,j]:=30
        {делаем так, чтобы походило на правду}
        else a[i,j]:=60;
        write(a[i,j]:4);
      end;
    writeln;
  end;
writeln('Матрица количества проживающих:');
for i:=1 to n do
  begin
    for j:=1 to m do
      begin
        b[i,j]:=random(8)+2; {от 2х до 9 человек}
        write(b[i,j]:4);
      end;
    writeln;
  end;
for i:=1 to n do
   begin
    k:=0;
    for j:=1 to m do
    if a[i,j] div b[i,j]<7 then inc(k);
    c[i]:=k;
   end;
writeln('Число квартир в доме, где на 1 жильца менее 7 м2');
for i:=1 to n do
writeln('Дом № ',i,' ',c[i],' квартир');
readln
end.
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal:одномер. и двумерн. массивы xxBOBAHxx Фриланс 2 20.10.2008 16:42
Pascal/Массивы ромка) Паскаль, Turbo Pascal, PascalABC.NET 6 14.06.2008 18:29
Массивы в Pascal Alex XXX Помощь студентам 4 21.04.2008 02:16
Pascal. Массивы Danilyuk Помощь студентам 1 22.01.2008 19:56