ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #5011  
Старый 24.11.2009, 17:40
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

Цитата:
Сообщение от МongBa†  
mobilka
заменить весь текст в мемо Memo1.Text:=s;
либо добавить строку Memo1.Lines.Add(s);
спасибо. а как в listbox вывести?
разобрался- Listbox1.Items.Add(s);
 

  #5012  
Старый 24.11.2009, 18:36
P.A.U.L
Познающий
Регистрация: 12.08.2009
Сообщений: 32
Провел на форуме:
482943

Репутация: 0
Отправить сообщение для P.A.U.L с помощью ICQ
По умолчанию

[Pascal]
Помогите доделать программу:

Задание звучит так:

Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов каждой строке.

Препод сказал, что там надо вконце написать какое то условие и присовить и уже вывести отсортированную матрицу, а я хз как сделать

Код:
program matr1;
uses crt;
 const n=5;
 const m=10;
 type s=array[1..n,1..m] of integer;
 const a:s=((1,1,1,1,1,6,7,8,9,10),
	  (1,2,2,2,5,6,7,8,9,10),
	  (1,2,3,3,5,6,7,8,9,10),
	  (1,7,7,7,7,7,7,7,7,10),
	  (1,2,3,7,7,7,7,7,7,10));
 var i,j,gl,loc,r,x,k:integer;
      b: array[1..n] of integer;
   begin
   clrscr;
    writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    write(a[i,j]:3);
   end;
 writeln;
end;
{Подсчет количества одинаковых элементов}
for i:=1 to n do begin
  gl:=0;
  for j:=1 to m-1 do begin
    loc:=1;
    for r:=j+1 to m do
      if a[i,j]=a[i,r] then loc:=loc+1;
    if loc>gl then begin gl:=loc; loc:=0 end;
  end;
  b[i]:=gl;
end;
for i:=1 to n do write(b[i],' ');
writeln;
for i:=1 to n-1 do begin
  x:=b[i]; k:=i;
  for j:=i+1 to n do
   if b[j]<x then begin x:=b[j]; k:=j end;
   b[k]:=b[i]; b[i]:=x;

(Вот здесь чего то нехватает)

end;
    for i:=1 to n do write(b[i],' ');
writeln;
readkey;
end.
 

  #5013  
Старый 24.11.2009, 19:21
StealthMaster
Познающий
Регистрация: 03.12.2008
Сообщений: 56
Провел на форуме:
140714

Репутация: 29
Отправить сообщение для StealthMaster с помощью ICQ
По умолчанию

Цитата:
Сообщение от P.A.U.L  
[Pascal]
Помогите доделать программу:

Задание звучит так:

Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов каждой строке.

Препод сказал, что там надо вконце написать какое то условие и присовить и уже вывести отсортированную матрицу, а я хз как сделать

Код:
program matr1;
uses crt;
 const n=5;
 const m=10;
 type s=array[1..n,1..m] of integer;
 const a:s=((1,1,1,1,1,6,7,8,9,10),
	  (1,2,2,2,5,6,7,8,9,10),
	  (1,2,3,3,5,6,7,8,9,10),
	  (1,7,7,7,7,7,7,7,7,10),
	  (1,2,3,7,7,7,7,7,7,10));
 var i,j,gl,loc,r,x,k:integer;
      b: array[1..n] of integer;
   begin
   clrscr;
    writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    write(a[i,j]:3);
   end;
 writeln;
end;
{Подсчет количества одинаковых элементов}
for i:=1 to n do begin
  gl:=0;
  for j:=1 to m-1 do begin
    loc:=1;
    for r:=j+1 to m do
      if a[i,j]=a[i,r] then loc:=loc+1;
    if loc>gl then begin gl:=loc; loc:=0 end;
  end;
  b[i]:=gl;
end;
for i:=1 to n do write(b[i],' ');
writeln;
for i:=1 to n-1 do begin
  x:=b[i]; k:=i;
  for j:=i+1 to n do
   if b[j]<x then begin x:=b[j]; k:=j end;
   b[k]:=b[i]; b[i]:=x;

(Вот здесь чего то нехватает)

end;
    for i:=1 to n do write(b[i],' ');
writeln;
readkey;
end.
В массиве b хранится количество самых часто встречающихся одинаковых элементов в строках матрицы. Найди минимальный из элементов этого массива, выведи строку, соответствующую ему. Потом берешь второй по величине элемент и выводишь строку, соответствующую ему. И т.д. до N.

На мой взгляд, было бы удобнее использовать массив записей
Код:
type
  TMatrixStrings = record
    StringNumber: integer;
    Count: integer;
  end;
Где count - количество элементов, которые чаще всего повторялись в строке матрицы.
Упорядочить этот массив по полю count, а затем вывести матрицу.

Код:
program matr1;
uses crt;
 const n=5;
 const m=10;
 type s=array[1..n,1..m] of integer;
 const a:s=((1,1,1,1,1,6,7,8,9,10),
	  (1,2,2,2,5,6,7,8,9,10),
	  (1,2,3,3,5,6,7,8,9,10),
	  (1,7,7,7,7,7,7,7,7,10),
	  (1,2,3,7,7,7,7,7,7,10));

type
  TMatrixStrings = record
    StringNumber: integer;
    Count: integer;
  end;


var i, j, gl, loc, r, x, k: integer;
      b: array[1..n] of TMatrixStrings;
begin
  clrscr;
  writeln('Исходная матрица:');
  for i:=1 to n do
    begin
      for j:=1 to m do
        begin
          write(a[i,j]:3);
        end;
      writeln;
     end;

{Подсчет количества одинаковых элементов}
for i:=1 to n do begin
  gl:=0;
  for j:=1 to m-1 do begin
    loc:=1;
    for r:=j+1 to m do
      if a[i,j]=a[i,r] then loc:=loc+1;
    if loc>gl then begin gl:=loc; loc:=0 end;
  end;
  b[i].count:=gl;
  b[i].StringNumber := i;
end;

for i:=1 to n do 
  write(b[i].count,' ');

writeln;

// сортировка
for i:=1 to n-1 do 
  begin
    x:=b[i].count; k:=i;
    for j:=i+1 to n do
      if b[j].count<x then 
        begin 
          x:=b[j].count; 
          k:=j; 
        end;
    b[k].count:=b[i].count; 
    b[i].count:=x;
    
    x := b[i].StringNumber;
    b[i].StringNumber := b[k].StringNumber
    b[k].StringNumber := x;
  end;
    
// вывод упорядоченной матрицы
for i:=1 to n do 
  writeln(a[b[i].StringNumber]);
writeln;
readkey;
end.
Писал без паскаля, возможно где-то ошибся.

Последний раз редактировалось StealthMaster; 24.11.2009 в 19:33..
 

  #5014  
Старый 24.11.2009, 20:32
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

помогите написать функцию. нажимаем button1, открывается опендиалог, выбираем файл .txt и выводим содержимое в listbox
 

  #5015  
Старый 24.11.2009, 20:37
МongBa†
Познающий
Регистрация: 12.05.2009
Сообщений: 45
Провел на форуме:
255342

Репутация: 28
Отправить сообщение для МongBa† с помощью ICQ
По умолчанию

Цитата:
Сообщение от mobilka  
помогите написать функцию. нажимаем button1, открывается опендиалог, выбираем файл .txt и выводим содержимое в listbox
if opendialog.execute then listbox.items.loadfromfile(opendialog.filename);
 

  #5016  
Старый 24.11.2009, 20:55
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

Цитата:
Сообщение от МongBa†  
if opendialog.execute then listbox.items.loadfromfile(opendialog.filename);
спасибо. теперь нужно следующее-
имеем файл .txt
в нем информация вида-
[1]
09843075432
[2]
7854325890863216809765434
[3]
65D432
и т.д т.п
нужно выдернуть определенный блок например [2] и его содержимое т.е 7854325890863216809765434 вывести в тот же листбокс
 

  #5017  
Старый 24.11.2009, 22:05
P.A.U.L
Познающий
Регистрация: 12.08.2009
Сообщений: 32
Провел на форуме:
482943

Репутация: 0
Отправить сообщение для P.A.U.L с помощью ICQ
По умолчанию

StealthMaster, спс за помощь, попробую разобраться Но тот метод который ты применил, т.е. использовал массив записей, я не знаю... Но попробую все таки разобраться
 

  #5018  
Старый 24.11.2009, 22:23
=Zeus=
Участник форума
Регистрация: 10.08.2009
Сообщений: 238
Провел на форуме:
724939

Репутация: 108
Отправить сообщение для =Zeus= с помощью ICQ
По умолчанию

Цитата:
Сообщение от mobilka  
спасибо. теперь нужно следующее-
имеем файл .txt
в нем информация вида-
[1]
09843075432
[2]
7854325890863216809765434
[3]
65D432
и т.д т.п
нужно выдернуть определенный блок например [2] и его содержимое т.е 7854325890863216809765434 вывести в тот же листбокс
Тебе же написали, за загрузку из файла в листбок отвечает функция
Цитата:
listbox.items.loadfromfile('тут твой путь+имя файла');
Можешь использовать скрытый лист-бокс как буфер, и если тебе нужно 2-ю строку, то бери оттуда вторую строку ListBox2.Items[2] и добавляй ее в свой видимый листбокс.
Код:
ListBox1.Items.Add(ListBox2.Items[2]);
Лучше было бы конечно создавать стринг лист в памяти, но смотри сам.

Последний раз редактировалось =Zeus=; 24.11.2009 в 22:27..
 

  #5019  
Старый 24.11.2009, 22:29
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме:
4761503

Репутация: 229
По умолчанию

Цитата:
нужно выдернуть определенный блок например [2] и его содержимое т.е 7854325890863216809765434 вывести в тот же листбокс
"Работа с ini файлами" в гугле

Последний раз редактировалось wolmer; 24.11.2009 в 23:45..
 

  #5020  
Старый 24.11.2009, 23:28
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

Цитата:
Сообщение от =Zeus=  
Тебе же написали, за загрузку из файла в листбок отвечает функция
Можешь использовать скрытый лист-бокс как буфер, и если тебе нужно 2-ю строку, то бери оттуда вторую строку ListBox2.Items[2] и добавляй ее в свой видимый листбокс.
Код:
ListBox1.Items.Add(ListBox2.Items[2]);
Лучше было бы конечно создавать стринг лист в памяти, но смотри сам.
блин выдирает не то что нужно. а именно-
в листбокс 2 загружается-
[1]
09843075432
[2]
7854325890863216809765434
[3]
65D432
в листбокс1 выводит вторую строчку-
09843075432
а нужно 7854325890863216809765434
а если файл содержит всего одну строчку то программа вылетает с ошибкой.
p.s заменить [2] на [4] я догадался но это не то что нужно.

Последний раз редактировалось mobilka; 24.11.2009 в 23:39..
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ