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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2011, 16:34   #1
абвгд
Пользователь
 
Регистрация: 04.09.2011
Сообщений: 19
По умолчанию 2 задачки на массивы

Помогите решить =)
Как во второй задаче выделить нужные элементы матрицы?
Изображения
Тип файла: jpg 73, 17.JPG (27.7 Кб, 147 просмотров)

Последний раз редактировалось абвгд; 16.09.2011 в 16:54.
абвгд вне форума Ответить с цитированием
Старый 16.09.2011, 16:40   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И как помочь? Что конкретно не получается?
Если вы не хотите ничего рассказать\показaть, кроме копипаста задания, то это называется не "помогите решить", а "решите за меня" )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.09.2011, 16:54   #3
абвгд
Пользователь
 
Регистрация: 04.09.2011
Сообщений: 19
По умолчанию

Как во второй задаче выделить нужные элементы матрицы?
И как выделить в первой задаче индексы массива, которые должны быть в квадрате?
Так? for i:=1 to sqrt(n) do

Последний раз редактировалось абвгд; 16.09.2011 в 16:58.
абвгд вне форума Ответить с цитированием
Старый 16.09.2011, 17:10   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Эх, никто не хочет учиться!)
Код:
// первая прога
const n=100;
var
  mas:array [1..n] of integer;
  s:string;
  i,j:integer;
  veshestvennoe:boolean;
begin
  for i:=1 to n do
  begin
    veshestvennoe:=false;
    mas[i]:=random(1000);
    s:=FloatToStr(sqrt(mas[i]));
    for j:=1 to length(s) do
       if s[j]='.' then
       begin    
           veshestvennoe:=true;
           break;
       end;
       if not veshestvennoe then writeln(mas[i]);
  end;

end.
Вместо замудренного алгоритма с использования строки можно написать так:
Код:
if int(sqrt(mas[i]))=sqrt(mas[i]) then writeln(mas[i]);
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 16.09.2011 в 17:15.
Rin вне форума Ответить с цитированием
Старый 16.09.2011, 19:51   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Код:
//вторая прога
const n=7;
var
summa:extended;
m:array [1..7,1..7] of double;
i,j :integer;
..........
function sum(var chislo,ii,jj:integer):extended;
var z,g:integer;
begin
  result:=0;
  if chislo<>0 then
  begin
     g:=(n div ii)+1;
     for z:=0 to chislo do
     begin
          result:=result+m[ii,g];
          g:=g+1;
     end;
     g:=n div ii;
     for z:=0 to chislo-1 do
     begin
          result:=result+m[ii,g];
          g:=g-1;
     end;     
  end
  else
  result:=m[ii,jj];
........
begin
...........
//заполнение матрицы
//ещё что-нибудь твое
......
//а теперь вычисление  суммы
summa:=0;
for i:=1 to n do
for j:=1 to n do
if ((n div i)+1)<=i then summa:=summa+sum(i-1,i,j)
  else summa:=summa+sum(n-i,i,j)
Только тут могут быть косяки, т.к. в Delphi не проверял. В уме набрасывал код.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 18.09.2011, 12:51   #6
абвгд
Пользователь
 
Регистрация: 04.09.2011
Сообщений: 19
По умолчанию

А для паскаля же пойдёт?)
абвгд вне форума Ответить с цитированием
Старый 18.09.2011, 13:12   #7
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Цитата:
А для паскаля же пойдёт?)
На чем по твоему написаны данные программы?
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 19.09.2011, 04:00   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Прошу прощения за вторую программу. Ну и огород я нагородил там.
Проверил на delphi(интересно стало и заняться нечем было) и очумел от заоблачных цифр))).
Долго ломал голову над выборкой элементов и наконец придумал. Вот рабочая прога.
Код:
//вторая прога
const n=7;
var
summa:extended;
m:array [1..n,1..n] of double;
i,j :integer;


begin
randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
m[i,j]:=random(2);
write(m[i,j]:7:2);
end;
writeln;
end;
//а теперь вычисление  суммы
summa:=0;

  for i := -(n div 2) to (n div 2) do
  for j := abs(i) + 1 to n - abs(i) do
  summa := summa + m[i + (n div 2) + 1, j];


writeln;
writeln;
writeln(summa:9:7);

readln;
end.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 19.09.2011, 04:58   #9
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Эх, никто не хочет учиться!)
Код:
// первая прога
const n=100;
var
  mas:array [1..n] of integer;
  s:string;
  i,j:integer;
  veshestvennoe:boolean;
begin
  for i:=1 to n do
  begin
    veshestvennoe:=false;
    mas[i]:=random(1000);
    s:=FloatToStr(sqrt(mas[i]));
    for j:=1 to length(s) do
       if s[j]='.' then
       begin    
           veshestvennoe:=true;
           break;
       end;
       if not veshestvennoe then writeln(mas[i]);
  end;

end.
Вместо замудренного алгоритма с использования строки можно написать так:
Код:
if int(sqrt(mas[i]))=sqrt(mas[i]) then writeln(mas[i]);
Rin, не нужно проходить по всем элементам массива и выбирать по условию. Нужно пройтись только по полным квадратам:
Код:
  i:= 1;
  while Sqr(i)<=n do begin
    Writeln(s[i]);
    Inc(i)
  end;
Кстати, оба способа проверки условия спорны. Первый - потому что в стандартном Pascal нет функции FloatToStr (нужно подключать sysutils). Второй - может не сработать из-за точности. Хотя это маловероятно, но все же старайся избегать проверки на равенство для действительных чисел. Делай проверку неравенством модуля разности и малого эпсилон.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 19.09.2011, 06:08   #10
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Только после того, как Ты поправил меня, я увидел, что не так понял задачу.
Мне почудилось, что нужно вывести не индексы полных квадратов, а числа в массиве, такие как :4, 9, 16, 25,..., 256 или 625, а если таких чисел в массиве нет, то ничего не будет на экране.
Вот я лошара))). Стыдно.
Цитата:
Делай проверку неравенством модуля разности и малого эпсилон
А это как?
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 19.09.2011 в 06:14.
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачки (Массивы) Pandemona18 Паскаль, Turbo Pascal, PascalABC.NET 3 08.03.2011 12:44
2 Задачки на массивы в Паскале Nikolai17 Помощь студентам 6 19.11.2009 17:26
задачки на массивы в Си Defa4ka Помощь студентам 2 25.10.2009 18:03
Задачки на массивы Маськ@ Паскаль, Turbo Pascal, PascalABC.NET 4 20.12.2008 15:26