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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 21:36   #1
fasty
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 25
Восклицание переписать программу попроще

Код:
#include <iostream>
#include <functional>
#include <algorithm>
#include <ctime>
#include <cstdlib>
 
typedef std::pair<int, int>               T_pair;
typedef std::vector<std::vector<T_pair>>  T_sets;
 
bool operator== (const T_pair &one, const T_pair &two){
  return one.first == two.first && one.second == two.second;
}
 
size_t cnt(const T_sets &_s, const T_pair &_p){
  size_t  c = 0;
  for(auto &x : _s)
    if(std::find(x.begin(), x.end(), _p) != x.begin()) ++c;
  return c;
}
 
int main(){
  srand(time(0));
  int n, m;
  std::cin >> n >> m;
  T_sets  sets(n, std::vector<T_pair>(m));
  for(auto &x : sets)
    std::generate_n(x.begin(), m, []() -> T_pair{
      return std::make_pair(rand() % 20 - 11, rand() % 20 - 11);
    });
  T_pair  res = *std::max_element(sets[0].begin(), sets[0].end(), [&](const T_pair &one, const T_pair &two){
                    return cnt(sets, one) < cnt(sets, two);
                });
  std::cout << "A(" << res.first << ';' << res.second << ')';
  return 0;
}
Задание:
на плоскости задано n множеств по m точек в каждом. Среди точек первого множества найти такую которая принадлежит наибольшему количеству множеств.
Помогите реализовать её попроще, то есть без векторов, без библ. ctime,<functional>,<algorithm>,<cti me>
fasty вне форума Ответить с цитированием
Старый 18.12.2011, 21:40   #2
VKorablev
Форумчанин
 
Аватар для VKorablev
 
Регистрация: 14.04.2011
Сообщений: 126
По умолчанию

т.е. нужно сделать программу проще? без векторов и с динамикой?
Нам больше не нужно смотреть на мир сквозь замочную скважину 64Кб сегмента (с) ВалИк
VKorablev вне форума Ответить с цитированием
Старый 18.12.2011, 21:47   #3
fasty
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 25
По умолчанию

да, надо переписть с динамикой, без использования вышеуказанных библиотек и без динамики
fasty вне форума Ответить с цитированием
Старый 18.12.2011, 22:46   #4
fasty
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 25
По умолчанию

Код:
uses crt;
const nmax=8;
type point=record
           x,y:integer;
           end;
var a:array[1..nmax,1..nmax] of point;
    m,n,i,j,k,imx,s,mx:byte;
    f:boolean;
begin
clrscr;
repeat
write('Количество множеств до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество точек в множествах до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Введите элементы множеств:');
for i:=1 to n do
 begin
  writeln('Множество ',i);
  writeln('Точка 1');{первая}
  write('x=');readln(a[i,1].x);
  write('y=');readln(a[i,1].y);
  for j:=2 to m do{остальные с проверкой на повтор}
   begin
    repeat
    writeln('Точка ',j);
    write('x=');readln(a[i,j].x);
    write('y=');readln(a[i,j].y);
    k:=1;
    f:=true;
    while (k<=j-1) and f do
    if(a[i,k].x=a[i,j].x)and(a[i,k].y=a[i,j].y)then f:=false
    else k:=k+1;
    until f; {если такой еще не было, все Ok}
   end;
 end;
clrscr;
writeln('Множества:');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(' [',a[i,j].x:3,',',a[i,j].y:3,']');
  writeln;
 end;
writeln;
mx:=0;imx:=0;
for i:=1 to m do{первое множество}
 begin
  s:=0;
  for k:=2 to n do{остальные}
   begin
    f:=false;
    j:=1;
    while(j<=m) and not f do
    if(a[k,j].x=a[1,i].x)and(a[k,j].y=a[1,i].y)then f:=true
    else j:=j+1;
    if f then s:=s+1;{если есть +1}
   end;
  if s>mx then{больше макс}
   begin
    mx:=s;
    imx:=i{номер точки}
   end;
 end;
if imx=0 then write('Ни одна из точек 1 множества не встречена в остальных')
else write('Наибольшему числу множеств принадлежит точка [',a[1,imx].x,',',a[1,imx].y,']');
readln
end.
вот есть код на паскале, можно попробовать перевести на С++
fasty вне форума Ответить с цитированием
Старый 18.12.2011, 23:00   #5
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от fasty Посмотреть сообщение
Помогите реализовать её попроще, то есть без векторов, без библ. ctime,<functional>,<algorithm>,<cti me>
И вообще, на паскале!
como вне форума Ответить с цитированием
Старый 18.12.2011, 23:05   #6
fasty
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 25
По умолчанию

нет) на паскале она есть, надо на С++
fasty вне форума Ответить с цитированием
Старый 20.12.2011, 22:54   #7
Jasmin
 
Регистрация: 20.12.2011
Сообщений: 3
По умолчанию

а как перевести эту программу на фортран????=)
Jasmin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переписать программу геннадий522 Visual C++ 2 18.12.2011 14:46
переписать программу d0nDi Общие вопросы Delphi 1 06.08.2011 22:55
переписать программу на С++ для Builder 6 manohina10 Помощь студентам 1 24.10.2010 16:39
переписать программу с VB на delphi qpush Помощь студентам 1 21.04.2010 23:57
Переписать программу с использованием функций, С++ Vikylik Помощь студентам 2 09.04.2009 10:39