2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите пожалуйста с массивами
Сообщение25.12.2007, 23:51 


19/12/07
10
1.Пусть В-двумерный массив целых чисел размерности N*N.Ввести его случайным образом.Поменять местами:
а)Макс.из элементов массива и мин.по модулю из элементов побочной диагонали
б)1-ую и 2-ую строки массива
в)Строки с макс. и мин. суммой квадратов элементов



2.Пусть А-одномерный массив N целых чисел
а)Поменять местами макс. по модулю элемент и элемент ближащий к числу 1.87
б)Проверить является ли 6-ой чётный элемент полож.,а если такого элемента нет вывести сообщение
в)Искл.из массива все нулевые элементы

 Профиль  
                  
 
 
Сообщение26.12.2007, 02:30 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil: fiks
В таком виде Вам никто помочь не сможет. Программу за Вас никто писать не будет, да и не понятно — какой компилятор, какой язык, какая ось. Но главное — написание программы за Вас ничего не изменит. Вы по-прежнему ничему не научитесь.

Так что пишите свою программу. Если у Вас будут с ней затруднения, мы попытаемся помочь.

 Профиль  
                  
 
 
Сообщение26.12.2007, 13:08 


19/12/07
10
незваный гость писал(а):
:evil: fiks
В таком виде Вам никто помочь не сможет. Программу за Вас никто писать не будет, да и не понятно — какой компилятор, какой язык, какая ось. Но главное — написание программы за Вас ничего не изменит. Вы по-прежнему ничему не научитесь.

Так что пишите свою программу. Если у Вас будут с ней затруднения, мы попытаемся помочь.

Про язык програмирования забыл написать - паскаль...по поводу того что если за меня кто нибудь напишет программу,то мне это ничего не даст...ну в общем если у меня не будет этой программы,то собственно говоря есть возможность ,что учится в университете я не буду.(эт раз)(В случае 1 у меня не будет точно возможности научится програмировать)
2.Я раньше никогда не изучал програмирование.
3.В данное время занимаюсь на курсах,изучаю паскаль.
Если бы у меня была возможность написать программу,я сюда бы не обращался.

Так что в этом Вы ошиблись!
незваный гость писал(а):
Но главное — написание программы за Вас ничего не изменит.


Наброски программ есть.

 Профиль  
                  
 
 
Сообщение26.12.2007, 14:25 


28/09/07
172
могу помочь, но только на Си.
или можно вместе продумать алгоритм решения.

 Профиль  
                  
 
 
Сообщение26.12.2007, 23:10 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
незваный гость писал(а):
Наброски программ есть.

Очень хорошо, поместите их здесь. Лучше всего, используя тег [cоde].

Я не думаю, что Вы правильно меня поняли. Никто не отказывается Вам помогать. Поверьте (если Вы этого не знаете сами), что помочь человеку разобраться занимает гораздо больше времени и сил, чем написать программу, подобную Вашей. И мы, участники форума на это идём. Потому, что дав Вам рыбу, мы накормим Вам обедом. А дав Вам удочку, мы обеспечим себе обед (когда Вы пригласите нас в гости). :)

А-а-а-а. Перечитав, я начал понимать, что произошло. Когда я писал «Так что пишите свою программу», я имел в виду размещение программы здесь, на форуме, а вовсе не «гуляй с миром». Извините, пожалуйста, за невнятное сообщение.

 Профиль  
                  
 
 
Сообщение27.12.2007, 19:04 


19/12/07
10
Это 1 программа,только не соответсвует 3 пункту задания...в задачи я поменял местами столбцы с мин и макс суммой квадратов элементов.
Как мне можно расписать в конце суммы квадратов всех столбцов?
Мне надо,чтобы на экран выводились не только значения столбцов с мин и макс сумм квадратов элементов но и всех остальных...
Код:
program Ren74;
uses crt;
const n=5;
type dar = array [1..n,1..n] of integer;
   ar=array [1..n] of longint;
var max,min,i,k,i1,i2,k1,k2,k3,save:longint;
a:dar;
b:ar;
begin
clrscr;
randomize;
max:=-10;
min:=10;
i1:=0;
i2:=0;
k1:=0;
k2:=0;
for i:=1 to n do for k:=1 to n do a[i,k]:=random (9);
for i:=1 to n do
   begin
    for k:=1 to n do write (a[i,k]:5);
     writeln;
    end;
k:=5;
k3:=0;
k1:=0;
for i:=1 to n do
    begin
     if abs(a[i,k-k3])<min then
      begin
        min:=abs(a[i,k-k3]);
        i1:=i;
        k1:=k-k3;
      end;
     k3:=k3+1;
    end;
writeln ('Min=',a[i1,k1],'[',i1,',',k1,']');
for i:=1 to n do
for k:=1 to n do
  begin
    if a[i,k]>max then
     begin
      max:=a[i,k];
      i2:=i;
      k2:=k;
     end;
  end;
writeln ('Max=',a[i2,k2],'[',i2,',',k2,']');
save:=a[i1,k1];
a[i1,k1]:=a[i2,k2];
a[i2,k2]:=save;
writeln;
writeln ('После замены');

for i:=1 to n do
begin
  for k:=1 to n do write (a[i,k]:5);
   writeln;
  end;
i1:=1;
i2:=2;
for k:=1 to n do b[k]:=a[i1,k];
for k:=1 to n do a[i1,k]:=a[i2,k];
for k:=1 to n do a[i2,k]:=b[k];
readln;
writeln('После замены 1-ой и 2-ой строки');
for i:=1 to n do
begin
  for k:=1 to n do write (a[i,k]:5);
writeln
end;
max:=-999999;
min:=999999;
for k:=1 to n do b[k]:=0;
for k:=1 to n do
   begin
      for i:=1 to n do
         begin
          b[k]:=b[k]+(a[i,k]*a[i,k]);
         end;
   end;
for k:=1 to n do
begin
  if b[k]<min then
   begin
    min:=b[k];
    k1:=k;
   end;
  if b[k]>max then
   begin
   max:=b[k];
   k2:=k;
  end;
end;
readln;
writeln ('max =',max,'');
writeln ('min =',min,'');
writeln ('После замены');
for i:=1 to n do b[i]:=a[i,k2];
for i:=1 to n do a[i,k2]:=a[i,k1];
for i:=1 to n do a[i,k1]:=b[i];
for i:=1 to n do
   begin
    for k:=1 to n do write (a[i,k]:5);
    writeln;
   end;
readln;
end.

Вот так все это выглядит
Изображение

Добавлено спустя 10 минут 16 секунд:

незваный гость писал(а):
:evil:
незваный гость писал(а):
Наброски программ есть.

Очень хорошо, поместите их здесь. Лучше всего, используя тег [cоde].

Я не думаю, что Вы правильно меня поняли. Никто не отказывается Вам помогать. Поверьте (если Вы этого не знаете сами), что помочь человеку разобраться занимает гораздо больше времени и сил, чем написать программу, подобную Вашей. И мы, участники форума на это идём. Потому, что дав Вам рыбу, мы накормим Вам обедом. А дав Вам удочку, мы обеспечим себе обед (когда Вы пригласите нас в гости). :)

А-а-а-а. Перечитав, я начал понимать, что произошло. Когда я писал «Так что пишите свою программу», я имел в виду размещение программы здесь, на форуме, а вовсе не «гуляй с миром». Извините, пожалуйста, за невнятное сообщение.

Спасибо за помощь...
Я просто думал,что для разбирающихся людей это как 2 пальца об асфальт....
Ну лучше конечно в этом самому разобратся :wink:

 Профиль  
                  
 
 
Сообщение30.12.2007, 00:26 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
У меня много мыслей по поводу Вашей программы.
fiks писал(а):
Я просто думал,что для разбирающихся людей это как 2 пальца об асфальт....
Вы правы, а что? Вы думаете, пальцы не жаль?! Вы ещё об наждак посоветуйте. :D Но дело в том, что нам это не нужно. Хотя мы готовы помочь Вам.

1) Я немного переформатировал Ваш код. Мне так легче читать. Посмотрите, может и Вам понравится.

Код:
  1  program Ren74;
  2    uses crt;
  3
  4    const
  5      n = 5; (* dimmension of the array *)
  6
  7    type
  8      dar = array [1..n,1..n] of integer;
  9      ar  = array [1..n] of longint;
10
11    var
12      max, min, i, k, i1, i2, k1, k2, k3, save: longint;
13      a: dar;
14      b: ar;
15
16  begin
17    clrscr;
18
19    randomize;
20
21    max:=-10;
22    min:=10;
23    i1:=0;
24    i2:=0;
25    k1:=0;
26    k2:=0;
27
28    (* random initialization *)
29    for i:=1 to n do begin
30      for k:=1 to n do begin
31        a[i,k]:=random (9);
32      end;
33    end;
34
35    (* print array *)
36    for i:=1 to n do begin
37      for k:=1 to n do begin
38        write (a[i,k]:5);
39      end;
40      writeln;
41    end;
42
43    (* find a min of abs of the other diagonal *)
44    k:=5; k3:=0; k1:=0;
45    for i:=1 to n do begin
46      if abs(a[i,k-k3]) < min then begin
47        min:=abs(a[i,k-k3]);
48        i1:=i;
49        k1:=k-k3;
50      end;
51      k3:=k3+1;
52    end;
53    writeln ('Min=',a[i1,k1],'[',i1,',',k1,']');
54
55    (* find a max of the array *)
56    for i:=1 to n do begin
57      for k:=1 to n do begin
58        if a[i,k] > max then begin
59          max:=a[i,k];
60          i2:=i;
61          k2:=k;
62        end;
63      end;
64    end;
65    writeln ('Max=',a[i2,k2],'[',i2,',',k2,']');
66
67    (* swap them *)
68    save:=a[i1,k1]; a[i1,k1]:=a[i2,k2]; a[i2,k2]:=save;
69
70    (* print updated array *)
71    writeln;
72    writeln ('Ïîñëå çàìåíû');
73    for i:=1 to n do begin
74      for k:=1 to n do begin
75        write (a[i,k]:5);
76      end;
77      writeln;
78    end;
79
80    (* swap first and second raw *)
81    i1:=1;
82    i2:=2;
83    for k:=1 to n do begin
84      b[k]:=a[i1,k];
85    end;
86    for k:=1 to n do begin
87      a[i1,k]:=a[i2,k];
88    end;
89    for k:=1 to n do begin
90      a[i2,k]:=b[k];
91    end;
92
93    (* print updated array *)
94    readln;
95    writeln('Ïîñëå çàìåíû 1-îé è 2-îé ñòðîêè');
96    for i:=1 to n do begin
97      for k:=1 to n do begin
98        write (a[i,k]:5);
99      end;
100      writeln
101    end;
102
103
104
105    max:=-999999;
106    min:=999999;
107    for k:=1 to n do begin
108      b[k]:=0;
109    end;
110
111    for k:=1 to n do begin
112      for i:=1 to n do begin
113        b[k]:=b[k]+(a[i,k]*a[i,k]);
114      end;
115    end;
116
117    for k:=1 to n do begin
118      if b[k]<min then begin
119        min:=b[k];
120        k1:=k;
121      end;
122      if b[k]>max then begin
123        max:=b[k];
124        k2:=k;
125      end;
126    end;
127
128    readln;
129    writeln ('max =',max,'');
130    writeln ('min =',min,'');
131    writeln ('Ïîñëå çàìåíû');
132    for i:=1 to n do begin
133      b[i]:=a[i,k2];
134    end
135    for i:=1 to n do begin
136      a[i,k2]:=a[i,k1];
137    end;
138    for i:=1 to n do begin
139      a[i,k1]:=b[i];
140    end;
141
142    (* print updated array *)
143    for i:=1 to n do begin
144      for k:=1 to n do begin
145        write (a[i,k]:5);
146      end;
147      writeln;
148    end;
149    readln;
150  end.


1-а) const, type, var начинают зоны. Поэтому их лучше писать на отдельной строчке, а содержимое зоны — с отступом.

1-б) Имеет смысл группировать переменные по смыслу, а не по типу. Например, max, min, save — это содержимое массива, а остальные переменные — индексы. Если Вы поменяете тип элементов массива, тип max, min, save поменяется, а тип остальных — нет. (К тому же тип индекса int, а не longint).

1-в) Я рекомендую Вам не экономить на begin-end. Даже если это ровно один оператор, пишите их! Поверьте, искать ошибки гораздо дольше, чем набрать.

1-г) Я использую (проверьте) другую стратегию отступа:
Код:
    for i:=1 to n do begin
            (* код с отступом *)
    end;

т.е., begin находится на той же строчке, что и оператор, а end — под началом оператора. То же самое относится и к if, и к остальным.

Ну, на этот счёт существуют разные конвенции. Я не буду утверждать, что эта — лучшая в мире.

1-е) Никто ещё не разу не жаловался на осмысленные комментарии в программах. Но кроме них, полезно разбивать текст пустыми строками, подобно разбиению текста книги на абзацы — по содержанию. Обратите внимание — циклы в строчках 132-140 работают вместе, и не разбиты пустыми строками.

2) Я не увидел нигде в задании указаний на диапазон случайных чисел. Это кажется мелочью, но накладывает отпечаток на структуру программы. Например, на инициализацию min и max (строки 21, 22), и структуру цикла поиска (см. ниже).

3) Задание n константой может быть и допустимо (это зависит от преподавателя и задачи). Но раз начав, следует это делать последовательно: обратите внимание на инициализацию k в стоке 44.

4) Скриншот, очевидно, не от этой программы. Во-первых, по-видимому, n было равно 3. Во-вторых, в программе исправлена ошибка, видимая на этом скриншоте (min лежит на побочной, а не на главной диагонали).

5) Поиск min (строки 44-52) заметно упростится, если заметить, что k не меняется в цикле (и всё время равно n), а k3 всегда равно i-1 (иными словами, для a[i,j] на побочной диагонали i + j = n + 1). Поэтому и k, и k3 можно убрать.

6) Если элементы массива — произвольные целые, то задача поиска несколько усложняется (поскольку задать min и max за границами диапазона нельзя). Обычный подход — проинициализировать первым элементом, участвующим в поиске (включая инициализацию соответствующих индексов!; он всегда находится, не правда ли), а потом можно либо плюнуть на экономию и оставить всё как есть, либо начать сравнение со следующего (т.е., в Вашем случае, со второй строки).

7) Вы печатаете массив 4 раза. Не пора ли сделать процедуру печати?

8) Переставлять строки так, как это делаете Вы, конечно можно. Но не очень эффективно (на традиционном компьютере, для чистоплюев). Гораздо быстрее и практичнее заметить, что перестановка строк может быть сведена к последовательной перестановке соответствующих элементов.

9) Вы переставляете строки дважды. Ещё одна процедура?

10) Та же самая идея, что и в пункте 8: зачем нам хранить суммы квадратов элементов строк? Ведь вычислив сумму квадратов, мы можем сразу сравнить с текущими значениями min и max, после чего радостно забыть. Кроме того, см. пункты 2 и 5.

В целом, всё хорошо. Программа должна работать. Если у Вас есть вопросы, я готов ответить. Или мы можем перейти к следующей программе.

Добавлено спустя 6 минут 46 секунд:

fiks писал(а):
в)Строки с макс. и мин. суммой квадратов элементов

fiks писал(а):
Это 1 программа,только не соответсвует 3 пункту задания...в задачи я поменял местами столбцы с мин и макс суммой квадратов элементов.
Как мне можно расписать в конце суммы квадратов всех столбцов?
Мне надо,чтобы на экран выводились не только значения столбцов с мин и макс сумм квадратов элементов но и всех остальных...

К сожалению, эта часть задания я пока не могу понять. Попробуйте написать подробнее и понятнее.

На всякий случай: i-тая строка массива A: A[i, 1], A[i, 2],… A[i, n]. i-ый столбец массива A: A[1, i], A[2, i],…A[n, i]. От перестановки индексов способ работы с массивом не меняется.

 Профиль  
                  
 
 
Сообщение30.12.2007, 17:18 


19/12/07
10
Цитата:
незваный гость

Огромное спасибо! Ценю ваш труд!
Многое возьму на заметку...
Все же,по поводу стратегии отступа,я предпочту свою.
В Вашем методе немного путаюсь...
* :evil: * - этот смайл является обязательной частью Ваших комментариев? :D
По поводу картинки,она действительно другая(сам только что заметил...ну в итоге там нету особых изменений,если только размер массива разный)
Спасибо ещё раз!
Ну в общем,последнее задания я попозже объясню...все же праздники!

С наступающим!!! :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group