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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.03.2012, 16:23   #1
Ilepekyp
 
Аватар для Ilepekyp
 
Регистрация: 18.05.2010
Сообщений: 6
Восклицание Работа с массивами. Поиск различных элементов.

Здравствуйте. Прошу помощи в поиске и написании алгоритма для такого задания: "Задана символьная матрица размером NxM. Определить k-количество различных элементов матрицы."
Находил алгоритм для паскаля, но никак не получилось перенсти это в си, знаний видимо не хватает
Вот собственно они:
1)
Код:
Const
N=2;
M=3;
var
A : array[1..N,1..M] of Char;
B: array[1..255] of Byte;
i,j:integer;
begin
for i:=1 to N do
begin
for j:=1 to M do
begin
Write('Введите символ ');
Readln(A[i,j]);
B[ord(A[i,j])]:=B[ord(A[i,j])]+1;
end;
end;
j:=0;
for i:=1 to 255 do
begin
if B>0 then
begin
Writeln('Символ ',chr(i),' встречается ',B,' раз.');
j:=j+1;
end;
end;
writeln;
writeln('Количество различных символов - ',j);
end.
2)
Код:
const
NN=10; // Например
MM=15;

type
Digit = set of Char;
var
A: array [1..NN,1..MM] of Char;
N,M,I,J,K: Integer;
S: Digit;

begin
Write('Введите N и M');
ReadLn(N,M);
WRiteLn('Введите матрицу');
for I:=1 to N do
begin
for J:=1 to M do
begin
Read(A[I,J]);
if A[I,J]=' ' then Read(A[i,j]);
end;
ReadLn;
end;
S:=[];
K:=0;
for I := 1 to N do
for J := 1 to M do
if not(A[i,j] in S) then
S:=S+[A[I,j]]
else
K:=K+1;
WriteLn('K=',K);
ReadLn;
end.
Вот собственно моя загатовка для лабораторной, куда остались лишь написать алгоритм:
Код:
#include <vcl.h>
using namespace std;
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
const nmax=10;
const mmax=10;
int a[nmax][mmax];
int i,j,n,m;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text=FloatToStr(n);
Edit2->Text=FloatToStr(m);
StringGrid1->ColCount=n+1;
StringGrid1->RowCount=m+1;
//--
StringGrid1->Cells[0][0]="Массив:";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (i=1;i<=n;i++)
  for (j=1;j<=m;j++){
    a[i][j]=StrToInt(StringGrid1->Cells[i][j]);
    //

 }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
n=StrToInt(Edit1->Text);
m=StrToInt(Edit2->Text);
StringGrid1->ColCount=n+1;
StringGrid1->RowCount=m+1;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button3Click(TObject *Sender)
{
ТУТ ДОЛЖЕН БЫТЬ АЛГОРИТМ :)
}
//---------------------------------------------------------------------------
Ilepekyp вне форума
Старый 09.03.2012, 18:43   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Ilepekyp

Задана символьная матрица размером NxM. Определить k-количество различных элементов матрицы

подсчет уникальных элементов в любой матрице

Код:
#include <set>

#include <algorithm>
#include <iterator>

template <typename T, size_t Rows, size_t Cols>
size_t unique(const T (&m)[Rows][Cols])
{
    std::set<T> s;
    std::copy(&m[0][0], &m[0][0] + Rows*Cols, std::inserter(s, s.begin()));
    return s.size();
}

использовать так:

int m[100][200] = ...
size_t n = unique(m);
Rififi вне форума
Старый 09.03.2012, 19:00   #3
Ilepekyp
 
Аватар для Ilepekyp
 
Регистрация: 18.05.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Ilepekyp

Задана символьная матрица размером NxM. Определить k-количество различных элементов матрицы

подсчет уникальных элементов в любой матрице

Код:
#include <set>

#include <algorithm>
#include <iterator>

template <typename T, size_t Rows, size_t Cols>
size_t unique(const T (&m)[Rows][Cols])
{
    std::set<T> s;
    std::copy(&m[0][0], &m[0][0] + Rows*Cols, std::inserter(s, s.begin()));
    return s.size();
}

использовать так:

int m[100][200] = ...
size_t n = unique(m);
Спасибо конечно!
Все бы хорошо, но мне для Билдера надо, а в этом я пока еще не освоился.
Ilepekyp вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи на нахождение различных элементов в массиве и еще одна задача lelicki_bolicki Помощь студентам 6 05.11.2011 01:16
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
В одномерном масиве найти длинную цепочку стоящих попарно различных элементов Махряк Помощь студентам 0 05.12.2007 20:00
В одномерном масиве найти длинную цепочку стоящих попарно различных элементов Махряк Помощь студентам 0 29.11.2007 23:09