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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2010, 10:19   #1
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Радость Паскаль. Разреженная матрица.

Здравствуйте, ув. программисты!

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

Спасибо, если кто сможет помочь!

Код:
uses crt;
const a=7;
      b=6;
      Vi=a*b div 3;

var a1:array[1..Vi] of integer;
    a2:array[1..Vi] of integer;
    a3:array[1..Vi] of integer;

    n, i,j,kol: integer;



BEGIN
 clrscr;

   randomize;
   for n:=1 to Vi do
    begin
     a1[n]:=random(99)+1;
     a2[n]:=random(a)+1; 
     a3[n]:=random(b)+1;   
    end;

   gotoxy(1,4);
   write('a1: ');
   for n:=1 to Vi do
    begin
      write(a1[n]); write(',');
    end;
   writeln;

   write('a3: ');
   for n:=1 to Vi do
    begin
      write(a3[n]); write(',');
    end;
   writeln;

   write('a2: ');
   for n:=1 to Vi do
    begin
      write(a2[n]); write(',');
    end;
   writeln;

   gotoxy(1,8);
   writeln('Matrica:');
   writeln;

   for i:=1 to b do
    begin
     for j:=1 to a do
      begin
           write('0  ');
      end;
     writeln;
    end;

   for i:=1 to a do
    begin
     for j:=1 to b do
      begin

         for kol:=1 to Vi do
          begin
                 if a2[i]=1 then gotoxy(a2[i], 9+a3[i]) ;
                 if a2[i]>1 then gotoxy((a2[i]-1)*3, 9+a3[i]);
                  write(a1[i]);
          end;


      end;
     end;

 readkey;
END.
pa6kevi4 вне форума Ответить с цитированием
Старый 07.03.2010, 10:54   #2
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

.............................

Последний раз редактировалось pa6kevi4; 08.03.2010 в 08:44.
pa6kevi4 вне форума Ответить с цитированием
Старый 07.03.2010, 12:26   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Я разрешаю отвечать...
уф, спасибо. А то тут все прямо так и застыли в ожидании Вашего разрешения...
если это шутка, то не смешная, а если Вы так решили тему поднять, то могли бы что-нибуль менее вызывающее написать.

а по сути я вижу, как минимум две серьёзные ошибки:
1) случайное заполнение не застраховано от повторов (впрочем, думаю, что это Вы и сами видите в матрицах A2 и A3
2) выводить надо все элементы A1 ? Уберите ненужные вложенные циклы по i:=1 to a и по j:=1 to b и крутите цикл от 1 до Vi:
Код:
    for i:=1 to Vi do
          begin
              if a2[i]=1 then gotoxy(1, 9+a3[i]) ;
              if a2[i]>1 then gotoxy((a2[i]-1)*3, 9+a3[i]);
              write(a1[i]);
          end;

Последний раз редактировалось Serge_Bliznykov; 07.03.2010 в 12:47.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2010, 08:45   #4
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Спасибо, помогло. Я новичок, не могли бы помочь советом, как застраховать от повторов и как вычислить среднее арифметическое каждой строки?
pa6kevi4 вне форума Ответить с цитированием
Старый 08.03.2010, 08:45   #5
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Заранее спасибо
pa6kevi4 вне форума Ответить с цитированием
Старый 08.03.2010, 10:39   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Я новичок, не могли бы помочь советом, как застраховать от повторов
есть два основных подхода:
1) заполняем массив нужными значениями
а потом случайным образом перемешиваем
2) при получении очередного случайного значения выполняем в цикле проверку, что такого значения ещё не было, если было - из цикла не выходим.
(Внимание! При таком алгоритме надо строго следить, чтобы не попасть в бесконечный цикл. поясню. если Вы захотите получить 10 (к примеру) неповторяющихся случайных целых чисел от 1 до 6, то уйдёте в бесконечный цикл уже при получении 7-го числа - каждый раз будет оказываться, что такое случайное число уже есть!

p.s. А расскажите, пожалуйста, какую задачу (исходно) Вы решаете? Сдаётся мне, что у Вас матрица 6x7, которую Вы хотите заполнить/обработать... давайте условие задачи..

Цитата:
как вычислить среднее арифметическое каждой строки
хм.. просуммировать все числа в этой строке и разделить на количество просуммированных чисел..
Конкретно, что не получается?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2010, 12:42   #7
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

Условие задачи это поиск средних арифметических чисел в каждой строке. А также вывод их на экран.
pa6kevi4 вне форума Ответить с цитированием
Старый 08.03.2010, 12:43   #8
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
По умолчанию

[QUOTE=Serge_Bliznykov;473155]просуммировать все числа в этой строке и разделить на количество просуммированных чиселQUOTE]

да, это и не получается
pa6kevi4 вне форума Ответить с цитированием
Старый 08.03.2010, 12:46   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Тогда зачем Вам этот сложный "танец" с тремя массивами?!
Заведите матрицу
var A1 : array[1..6, 1..7] of integer;
заполняйте его, выводите на экран, считайте среднеарифметическое..
в чём проблема, не могу понять?.. ;(
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2010, 12:48   #10
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Радость

в том то и дело, что массивы нельзя использовать. Можно только эти 3 вектора. Помогите, пожалуйста понять как найти средние арифм.
pa6kevi4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[ C\C++ ] Разреженная матрица zord Помощь студентам 1 18.11.2009 12:28
паскаль ,матрица Ам тя Помощь студентам 2 17.11.2009 03:53
Паскаль.Матрица valis Помощь студентам 2 14.11.2009 13:01
Паскаль матрица!!!!! Igomax Помощь студентам 3 07.06.2009 16:20
матрица паскаль telle Помощь студентам 2 28.05.2009 01:01