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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2012, 18:51   #1
G-leb
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 18
По умолчанию Лаба по масивам/// запутался ((

Задали массив чисел A (n) , n ≤ 500. Разработать программу, которая вычисляет сумму всех чисел, которые повторяются, и произведение всех чисел, которые не повторяются
///Задайте значение действительным величинам произвольным образом в диапазоне от 0 до 100///

Код:
program lab5;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Var
   a : array [1..500] of   integer;
   i,n,k,j,g: integer;
       z:boolean;
begin
   z:= true;
   while (z) do begin


   writeln(' vvedite kol-vo elementov maciva= ');
   readln(n);
      if (n<501) then
       begin
       z:= false;
        randomize;
         k := random (100);
        for i:=k to n do
         read(a[i]);
        writeln;
        for i:=k to n do
         write(a[i],' ');
        writeln;
        for i:=1 to n do
         begin
         g:=0;
         for j:=1 to n do
         if a[i]=a[j]then inc(g);
        if g=1 then write (a[i],' ');



         end
         else
         z:= true;
         end
        readln;

end.

Последний раз редактировалось G-leb; 16.11.2012 в 19:02.
G-leb вне форума Ответить с цитированием
Старый 16.11.2012, 18:54   #2
G-leb
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 18
По умолчанию

Подправил чуть .. но не понимаю как определить одинаковые елементы и прибавить их .. а разные умножить ?

Последний раз редактировалось G-leb; 16.11.2012 в 19:00.
G-leb вне форума Ответить с цитированием
Старый 16.11.2012, 20:39   #3
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Цитата:
Сообщение от G-leb Посмотреть сообщение
Подправил чуть .. но не понимаю как определить одинаковые елементы и прибавить их .. а разные умножить ?
А расскажите суть вашего алгоритма, а то вот гляжу на него - понять не могу, вы там в цикле размерность вводите?
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 16.11.2012, 21:02   #4
G-leb
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 18
По умолчанию

на самом деле .. код бред .. вот пришел к результату ..


Код:
uses
  SysUtils;
const n = 5;
type mas = array[1..n] of integer;
var a: mas; i: byte;
begin writeln('vvod:');
for i:=1 to n do readln(a[i]);
writeln('vuvod:');
   for i:=1 to n do write(a[i]:n);
   readln;
   end.
все работает .. как теперь найти похожие и добавить , а не похожие умножить ?
G-leb вне форума Ответить с цитированием
Старый 16.11.2012, 21:15   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю такую схему:
Код:
Var
   a : array [1..5,1..2] of   integer;
   i,n,k,j,g: integer;
       z:boolean;
begin
 Randomize;
 for i:=1 to 5 do begin
   a[i,1]:=Random(5);
// Пройдем назад и если найдем подобное - увеличим его кол-во
   for j:=1 to i-1 do if a[i,1]=a[j,1] then inc(a[i,2]);
 end;

 g:=1;
  for i:=1 to 5 do begin
// Если колво подобных более нуля то суммируем иначе умножаем
   if a[i,2]>0 then n:=n+a[i,1] else g:=g+a[i,1];
 end;
// Тут выводим массивы
readln;
end.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2012, 21:32   #6
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Код:
program lab5;

{$APPTYPE CONSOLE}

uses
  crt;

Var
   a : array [1..500] of   integer;
   n, i, j, k, sum, mul, col: integer;
begin
  write('Введите размерность массива:');
  readln(n);
  mul := 1;// cумма элементов
  sum := 0;
// инициализация массива
  for i := 1 to n do
  begin
    randomize;
    a[i] := random (100);
  end;
// вывод элементов
  for i := 1 to n do   write(a[i], ' ');
//  проход массива. Каждый элемент сравниваем с каждым.
  writeln;
  k := 1;
  for i := 1 to n do
  begin
    col := 0; // переменная для  подсчёта  количества совпадений.
    for j := 1 to n do
    begin
    // если встретился такой же элемент
      if (a[i] = a[j]) then
      begin
        inc(col);// увеличиваем счётчик совпадений на 1
      end;
    end;
    { если  в программе было только одно свпадение чисел(сравнили
    число с самим собой) - произведение элнментов }
    if (col = 1) then
      mul := mul * a[i]
    else
    // иначе - сумма
    sum := (sum + a[i]);
  end;
  writeln('Cумма = ',sum);
  writeln('Произведение = ', mul);
  
end.
вот набросал кое что. суть такая: каждый элемент сравниваем с каждым и увеличиваем счётчик. Если счетчик =1(элемент не повторяется в массиве)
- умножаем, иначе складываем. Но если в массива, например два числа повторяются, 5 - то сумма их будет 10. И не вводите слишком большой размер матрицы - при умножении получаются гигантские числа.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 16.11.2012, 22:11   #7
G-leb
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 18
По умолчанию

kventin_zhuk

1. сказано в задании - "Задайте значение действительным величинам"

> mas = array[1..n] of integer; ставлю real выдает ошибку ...

2. генерирует как-то странно по 10-15 одинаковых чисел
и

uses
crt; тож ошибку выдает ставлю
uses
SysUtils; только тогда работает
G-leb вне форума Ответить с цитированием
Старый 16.11.2012, 22:38   #8
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

у меня просто паскаль АBC установлен. Уберите подключение crt. Я сделал для integer. Но если элементы массива Real. то переменные sum и mul должны быть типа real.(так как произведение/ сумма целых чисел - число целое, а действительных - действительное)
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com

Последний раз редактировалось kventin_zhuk; 16.11.2012 в 22:44.
kventin_zhuk вне форума Ответить с цитированием
Старый 17.11.2012, 03:42   #9
G-leb
Пользователь
 
Регистрация: 17.10.2011
Сообщений: 18
По умолчанию

Цитата:
Сообщение от kventin_zhuk Посмотреть сообщение
у меня просто паскаль АBC установлен. Уберите подключение crt. Я сделал для integer. Но если элементы массива Real. то переменные sum и mul должны быть типа real.(так как произведение/ сумма целых чисел - число целое, а действительных - действительное)


спасибо оч помогли .. ето моя персая лаба по масивам ))) ... разобрался ...!!!
G-leb вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по масивам. aerosm Помощь студентам 2 14.03.2011 18:40
задача по масивам!! Аленка425 Помощь студентам 5 08.12.2010 19:40
Паскаль. Задача по масивам Amid1990 Помощь студентам 3 16.11.2010 12:31
пару вопросов по масивам в паскале и С++ Lorden Помощь студентам 10 06.02.2009 20:50
Помогите решить задачки по масивам !! masha17 Паскаль, Turbo Pascal, PascalABC.NET 2 26.12.2008 09:36