Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.01.2014, 16:14
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию Подсчитать кол-во различных элементов в "сложных" условиях

вопрос в конце топика...
Изображения
Тип файла: png Безымянный.png (26.4 Кбайт, 6 просмотров)

Последний раз редактировалось aypinki, 31.01.2014 в 18:19.
Ответить с цитированием
  #2  
Старый 31.01.2014, 16:48
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aypinki
Код:
.....
SetLength(A, i); 
    A[i]:=ReportQuery.FieldValues['kod'];
.....
Ругается на A[i] - пишет что variable A[i] might not have been initialized. я уже гуглил это; не получается... по всякому((
Нумерация элементов в динамическом массиве начинается с нуля. Т.е. если ты задал размер массива например 5, то можешь обращаться только к индексам от 0 до 4, а элементов начиная с № 5 уже не существует.
Ответить с цитированием
  #3  
Старый 31.01.2014, 16:50
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Код:
i:=0 ; // сначала это
while  not  ReportQuery.Eof do
  begin
    SetLength(A, i);  // а потом сразу это
    A[i]:= // и вот это

вместо
Код:
  SetLength(A, i);  
напишите
Код:
  SetLength(A, i+1);

И зачем во второй раз сканировать таблицу?
Все повторы нужно искать в массиве А.
И для начала желательно этот массив отсортировать.
Ответить с цитированием
  #4  
Старый 31.01.2014, 17:36
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию

всё! массив получил, как мне подсчитать количество его различных элементов, подскажите пожалуйста !)
Ответить с цитированием
  #5  
Старый 31.01.2014, 18:03
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию

помогите пожалуйста! подсчитать кол-во разных чисел в A[i];
не работает (
Код:
kol:=0;
  for i:=1 to Lenght(A) do
   flag:=true;
   for j:=1 to Lenght(A) do
   if (A[j]=A[i]) and (j<>i) then
   flag:=false;
   if flag then
   kol:=kol+1;


Последний раз редактировалось aypinki, 31.01.2014 в 18:08.
Ответить с цитированием
  #6  
Старый 31.01.2014, 18:06
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aypinki
помогите пожалуйста! подсчитать кол-во разных чисел в A[i];
не работает - не понимает lenght
Вообще-то правильно это английское слово пишется как "Length".
Ответить с цитированием
  #7  
Старый 31.01.2014, 18:09
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Вообще-то правильно это английское слово пишется как "Length".
уже исправил, но не работает(
Ответить с цитированием
  #8  
Старый 31.01.2014, 18:09
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Вообще-то правильно это английское слово пишется как "Length".
уже исправил, но не правильно считает (
Ответить с цитированием
  #9  
Старый 31.01.2014, 18:14
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aypinki
уже исправил, но не правильно считает (
Не забывай использовать операторные скобки begin...end
Ответить с цитированием
  #10  
Старый 31.01.2014, 18:19
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Не забывай использовать операторные скобки begin...end
Код:
  for i:=0 to Length(A) do
  flag:=true;
   for j:=0 to Length(A) do
     if ((A[j]=A[i]) and (j<>i)) then
     flag:=false;
        if flag then
        kol:=kol+1;
помогите пожалуйста(
Ответить с цитированием
  #11  
Старый 31.01.2014, 18:39
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aypinki
Код:
  for i:=0 to Length(A) do
  flag:=true;
.....
Смотри, вот этот кусок будет работать вот так:
Код:
for i:=0 to Length(A) do flag:=true;
Т.е. много раз в переменную flag будет записано значение true, а какой смысл в одну переменную записывать одно и то же значение много раз?

И кроме того для подсчёта уникальных чисел тебе понадобится либо ещё один массив, либо модифицировать исходный массив.

Ещё можно воспользоваться классом TStringList:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  i: Integer;
begin
  sl := TStringList.Create;
  try
    sl.Sorted := True;
    sl.Duplicates := dupIgnore;
    for i := Low(A) to High(A) do sl.Add(IntToStr(A[i]));
    ShowMessageFmt('Уникальных чисел %d', [sl.Count]);
  finally
    sl.Free;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
aypinki (31.01.2014)
  #12  
Старый 31.01.2014, 18:49
aypinki aypinki вне форума
Прохожий
 
Регистрация: 21.01.2014
Сообщения: 10
Версия Delphi: 7
Репутация: 10
По умолчанию

многие это соетовали но не доконца объясняли...
Спасибо! работает! я по аве понял что вы добрый человек)))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter