TWINc

Помощь в решении заданий по программированию.

Рекомендованные сообщения

Такая проблема. Есть список. Пусть это будет список задач. При клике на столбце в списке задачи сортируются. Стандартное поведение реализованное с помощью ListViewItemSorter. Проблема такая. После того как закрываю окно где элементы уже были отсортированы, эти элементы встают в странном порядке. То есть вот исходная форма: post-36929-1206911864_thumb.jpg Далее нажимаю на скажем столбец Дата и получаю следующую форму: post-36929-1206911898_thumb.jpg Закрываю форму. При этом при следующих отображениях используется экземпляр уже существующей формы. Вызывается методом ShowDialog(). Вот код:

		if (TodayWindow == null)
		{
			TodayWindow = new Today();
			TodayWindow.TodayEvents = TodayEvents;
			TodayWindow.ShowDialog();
		}
		else
		{
			TodayWindow.TodayEvents = TodayEvents;
			TodayWindow.RefreshFormData();
			if (!TodayWindow.Visible)
			{
				TodayWindow.ShowDialog();
			}
		}

Проблема в том что при последующих открытиях элементы отображаются странно. Например если была сортировка по дате по возрастанию то получим следующую форму: post-36929-1206912272_thumb.jpg То есть как будто ничего не сортировалось. Если по убыванию то вообще такая фигня: post-36929-1206912302_thumb.jpg Не пойму почему так происходит. У меня в событтии Load формы происходит добавление элементов в список заново (RefreshFormData()). К этому моменту ListViewItemSorter уже указан. Значит сортировка должна отрабатывать. Ведь если указан ListViewItemSorter при добавлении элемента список сортируется автоматически. И как я понимаю при последующих вызовах формы список должен отображаться правильно. Отсортированным по нужному критерию. Всё бы ничего. Можно было подумать что я делаю что-то не так но тогда возникает вопрос. Если установить сортировку по дате по убыванию то откуда у меня берутся 2 одинаковые даты? Ведь если бы я неправильно сортировал то элементы выводились бы скажем в порядке следования в моей коллекции без сортировки. Но у меня даже элементы не те. И очень интересная штука. Если после такой кривой сортировки нажать левой кнопкой на элементе то он внезапно меняется на правильный (тот который должен быть при сортировке). Если кликнуть правой мышкой (в контекстном меню есть один пункт для просмотра доп. информации о задаче) так вообще обновляется весь список и становится правильным. Это что глюк Windows Forms такой? Или всё-таки я где-то накосячил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

см. КРУПНЫМИ БУКВАМИ

 

Такая проблема. Есть список. Пусть это будет список задач. При клике на столбце в списке задачи сортируются. Стандартное поведение реализованное с помощью ListViewItemSorter. Проблема такая. После того как закрываю окно где элементы уже были отсортированы, эти элементы встают в странном порядке. То есть вот исходная форма: post-36929-1206911864_thumb.jpg Далее нажимаю на скажем столбец Дата и получаю следующую форму: post-36929-1206911898_thumb.jpg Закрываю форму. При этом при следующих отображениях используется экземпляр уже существующей формы. Вызывается методом ShowDialog(). Вот код:

		if (TodayWindow == null)
		{
			TodayWindow = new Today();
			TodayWindow.TodayEvents = TodayEvents;
			TodayWindow.ShowDialog();
										   МНЕ КАЖЕТСЯ, ЧТО ПОСЛЕ ВОЗВРАТА УПРАВЛЕНИЯ СЮДА
										   НАДО ЕЩЁ КАКУЮ-ТО ОПЕРАЦИЮ ПРОИЗВЕСТИ, ПО СОХРАНЕНИЮ СОСТОЯНИЯ ОТСОРТ. ЛИСТА
		}
		else
		{
			TodayWindow.TodayEvents = TodayEvents;
											ЭТА СТРОКА ЕСТЬ В ОБЕИХ ВЕТВЯХ ИФА. ЕЁ НАДО ИЗ ИФА ВЫТАЩИТЬ.
			TodayWindow.RefreshFormData();
			if (!TodayWindow.Visible)
			{
				TodayWindow.ShowDialog();
				   ЭТО ТОЖЕ НАДО ИЗ ИФА ВЫТАЩИТЬ. ВЕДЬ ДИЛОГ МЫ В ЛЮБОМ СЛУЧАЕ ПОКАЗЫВАЕМ.
			}
		}

Проблема в том что при последующих открытиях элементы отображаются странно. Например если была сортировка по дате по возрастанию то получим следующую форму: post-36929-1206912272_thumb.jpg То есть как будто ничего не сортировалось. Если по убыванию то вообще такая фигня: post-36929-1206912302_thumb.jpg Не пойму почему так происходит. У меня в событтии Load формы происходит добавление элементов в список заново (RefreshFormData()). К этому моменту ListViewItemSorter уже указан. Значит сортировка должна отрабатывать. Ведь если указан ListViewItemSorter при добавлении элемента список сортируется автоматически. И как я понимаю при последующих вызовах формы список должен отображаться правильно. Отсортированным по нужному критерию. Всё бы ничего. Можно было подумать что я делаю что-то не так но тогда возникает вопрос. Если установить сортировку по дате по убыванию то откуда у меня берутся 2 одинаковые даты? Ведь если бы я неправильно сортировал то элементы выводились бы скажем в порядке следования в моей коллекции без сортировки. Но у меня даже элементы не те. И очень интересная штука. Если после такой кривой сортировки нажать левой кнопкой на элементе то он внезапно меняется на правильный (тот который должен быть при сортировке). Если кликнуть правой мышкой (в контекстном меню есть один пункт для просмотра доп. информации о задаче) так вообще обновляется весь список и становится правильным. Это что глюк Windows Forms такой? Или всё-таки я где-то накосячил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По поводу повторяющегося кода это я согласен но вряд-ли в этом проблема. И вряд-ли проблема в том что надо ещё что-то делать и уж тем более не при первом создании окна. Да и вообще проблема такая что по идее если бы я не так делал то элементы ну скажем не сортировались бы совсем. То есть сортировка сбарсывалась. А у меня отображаются 2 одинаковых и если кликнуть на одном (просто кликнуть, обработчкиов никаких нет) то почему-то всё встаёт на свои места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По поводу повторяющегося кода это я согласен но вряд-ли в этом проблема. <..> А у меня отображаются 2 одинаковых и если кликнуть на одном (просто кликнуть, обработчкиов никаких нет) то почему-то всё встаёт на свои места.

 

IRQ, дело в том, что недостаточно определить сортировку (свойство Sorting), чтобы после создания контрола его элементы были отображены в желаемом порядке. Нужно вызывать метод Sort после создания экземпляра элемента. Метод Sort вызывается также "автоматом" при перемещении, обновлении, изменении элементов контрола. Уверен, что именно поэтому у тебя и возникли "непонятки". <_<

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну вообще у меня в событии OnColumnClick происходит создание нового экземпляра ListViewItemSorter а это в своб очередь вывзывает сортировку автоматически это даже вдокументации написано. И опять же не находите ничего странного в том что элементы повторяются и почему-то становятся правильными если на них просто кликнуть!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прошу помочь ;) ..Задание такое:написать програмку на ЯВЕ :"Подсчёт суммы цифр натурального числа " Так как являюсь ламером,просьба подробно описать что к чему, и ышо, если можно, посоветуйте какую-нить книжку(харошую)по Яве с нуля вот... :angry: спасибо ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прошу помощи в программировании на Турбо Паскале.

 

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

 

Program zadanie;

uses CRT;

var

st,sn:string;

i,n,k:integer;

f:boolean;

BEGIN

Clrscr;

writeln('Vvedite stroky');

readln(st);

sn:='';

WHILE st<>#13 do begin

IF (st<>' ') or (st<>#13) do

WHILE (st<>' ') or (st<>#13) do

sn:=sn+st;

f:=true;

FOR i:=1 to ord(sn[0])-1 do

IF sn<sn[i+1] then f:=false;

IF f then write(sn); end;

readln;

END.

 

 

Вот код моей программы,но,к сожалению,она не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Очень интересная программа. Нет инициализации переменных, нет прохода по строке. i всегда равно неизвестному значению за исключением цикла for. Как она работать-то будет? И ещё интересная штука-по этому коду получается слова это всё что между символами проебла и #13. То есть символы всякие типа !@#$ тоже являются частью слова?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прошу помощи в программировании на Турбо Паскале.

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

<...>

Вот код моей программы,но,к сожалению,она не работает.

 

Оформляйте код в теги "code", размещая здесь сообщения.

 

Алгоритм доолжен быть примерно таков (это псевдокод, приближенный к синтаксису паскаля!):

 

Var
Const WordBreakers : String = #32+".,!?;:";
SourceString, OutWords, aWord : String;
CurrentPos, LastWordBreakerPos, OutWordsCount : Integer;

LastWordBreakerPos := 1; OutWordsCount :=0;

For CurrentPos := 1 to Lenght(SourceString) Do Begin
If (SourceString[CurrentPos] IN WordBreakers) and (CurrentPos - LastWordBreakerPos > 1) Then Begin
aWord = Copy (SourceString, LastWordBreakerPos+1, CurrentPos - LastWordBreakerPos); 
LastWordBreakerPos := CurrentPos;  
If aWord = MATCHCRITERIA Then Begin
   OutWords := OutWords + aWord;
   Inc (OutWordsCount);
 End; // word match
End; // new word
End; // for

Изменено пользователем RuForce

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет! На этот раз у меня вопрос слегка не по теме... Паскаль наотрез отказывается создавать exe-файл. В настройках ставлю галочку напротив "Disk", а не "MEMORY", компилирую.. Пишет "успешно", а ехе'шник не создает.. что делать?

 

*Проблема решена*

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет!!!! у меня такой вопрос: Подскажите, пожалуйста, как работает в Делфи 7 try и except????? кто из них закрывается end"ом??? Заранее всем благодарен!!!!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ScR?aM А поиском пробовал искать? Странано что не создаёт. Вообще нигде? Попробуй указать папку куда создавать в Options

heimlich geist существует 2 вида блоков:

 

try

...

excert

...

end

 

и

 

try

...

finally

...

end

 

Насколько знаю в Делфи нет блока с одновременным except и finally.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ScR?aM А поиском пробовал искать? Странано что не создаёт. Вообще нигде? Попробуй указать папку куда создавать в Options

heimlich geist существует 2 вида блоков:

 

try

...

excert

...

end

 

и

 

try

...

finally

...

end

 

Насколько знаю в Делфи нет блока с одновременным except и finally.

в пргоге есть блок

try

 

except

end

и блок

try

 

finally

end

объясните их работу пожалуйста!!!!!!!

 

вопрос про try и его контрукции все же очень интересен. подскажите пожалуйста!!!! Заранее благодарна )))))

Изменено пользователем kiss'a

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так я уже ответил. В блоке try пишется тот кусок кода где может возникнуть исключение. Например деление на 0. В блоке except происходит обработка этого исключиня. То есть тот код который выполнится при возникновении исключения. Блок finally служит для обработки после окончания всех действий. Было исключение или не было. Этот код выполнится всегда. Вот только в Делфи помойму нельзя одновременно писать except/finally что очень странно потому в Си например можно писать try/catch/finally/end. Типичиный пример для блока except-то же деление на 0:

 

x=3;
y=0;
try
r:=x/y; //Здесь возникает исключение
except
//А здесь обрабатывается
MesssageBox('Ошибка. Деление на 0');
end;

 

Типичный пример finally-обработка открытия соединения с БД:

try

//Отрктыие соединения, захват необходимых ресурсов

...

finally

//Независимо от результатов открытия соединения очищаем все занятые ресурсы

....

end;

 

Посоклько исключение это класс то имеется возможность обрабатывать разые исключения отдельно в разынх блоках except с указанием on <тип исключения> Причём надо помнить про иерархию. Если сначала будет обработано исклюение класса-родителя то исключения потомков не будут обработаны. То есть скажем если писать так:

try

except on Exception

except on...

except on...

end;

 

то следующие за Exception блоки не будут обработаны потому что при возникновении таких исключения они все будут являтсья потомками Exception который стоит первым. Поэтому сначала надо обрабатывать самые глубокие по иерархии исключения. То есть сначала обрабатывать скажем деление на 0 а потом уже все остальные. Ну и опять же поскольку это классы то у них есть полезные свойства например текст ошикби, её код, stack trace.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще раз все привет!!!! у меня вопрос:Есть ли втроенная функция в делфи 7 перевода числа типа real в строку? Для integer понятно это IntToStr. Ответте к то знает, пожалуйста!!!! Буду очень благодарна)))))

Изменено пользователем kiss'a

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

FloatToStr помойму эта функция называется. И наверняка всякие форматтеры есть. А ругается-где ругается? В какой строчке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

он ругается так: ' '' is not a valid integer value'. по ходу дела программа завершает свою работу с данной ошибкой в процедуре:

procedure TMainForm.zapVfileClick(Sender: TObject);
var  f,f1: TextFile;
 i,j,n: Integer;
 mass: array [0..32400,0..1] of integer;
 massYg: array [0..32400] of real;
 koef: real;
 ss1:string;
 stroka:array  [0..32400]of string;
begin
 n:=0;
 if BComPort1.Close then begin
 AssignFile(f,'dannie.csv');
 Rewrite(f);
 for i:=0 to kol do
 begin
 writeln(f,ss[i]);
 end;
 end;
 CloseFile(f);
 AssignFile(f,'dannie.csv');
 reset(f);
 for i:=2 to kol do
 begin
 readln(f,ss[i]);
 for j:=0 to length(ss[i]) do
 begin
  if (ss[i,j]=#48)or(ss[i,j]=#49)or(ss[i,j]=#50)or(ss[i,j]=#51)or(ss[i,j]=#52)
  or(ss[i,j]=#53)or(ss[i,j]=#54)or(ss[i,j]=#55)or(ss[i,j]=#56)or(ss[i,j]=#57)
   then ss1:= ss1 + ss[i,j]
 else
 begin
 mass[i,n]:=StrToInt(ss1);
 if n = 0 then n:=1 else n:=0;
	  end;
 end;
 end;
 koef:= 360/mass[kol,1];
 AssignFile(f1,'dannie1.csv');
 Rewrite(f1);
 for i:= 0 to kol do  begin
 massYg[i]:= mass[i,1]*koef;
 stroka[i]:= IntToStr(mass[i,0])+';'+  FloatToStr(massYg[i])+';';
 writeln(f1,stroka[i]);
					end;
 CloseFile(f);
 CloseFile(f1);
end; 

 

откуда там кавычка могла взятся??? не понимаю. в файл dannie записывается все нормально, а вот с обработкой уже сохраненных данных вопросы возникают ....как вы думаете, почему????

 

вот какие данные приняла и записала в файл dannie

 

 

Test COM V1.00_2

000000885;000000068;

000000794;000000208;

000000773;000000348;

000000816;000000489;

 

000000691;000000629;

000000688;000000770;

000000726;000000910;

000000596;000001051;

000000623;000001191;

000000630;000001332;

000000516;000001472;

 

000000573;000001612;

000000530;000001753;

000000435;000001893;

000000492;000002034;

000000417;000002174;

000000339;000002315;

000000413;000002455;

 

000000317;000002596;

000000272;000002736;

000000341;000002877;

000000230;000003017;

000000209;000003157;

000000271;000003298;

000000157;000003438;

 

 

и дальше в том же духе, а вот кавычки нигде нет....., которую он не может преобразовать в integer

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ещё неплохо было бы получить экземпляр файла данные.цсв. А так возможно просто где-то происходит запись не числа а кавычки.

 

А есть пустая строка в окнце файла? Это не кавычка а пустое значение по ходу. Пустая строка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кажется я тебя поняла, потому что у меня идет накапливание переменной kol в конце другой процедуре. следовательно прие ее завершении переменная все равно увеличивается на 1. Спасибо огромное!!! ты меня очень выручил!!!!!!!

 

но почему то при использовании в приведенной процедуре kol-1 все равно такая же ошибка???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну я говорю может он пустые строки читает? И что такое ss? Как объявлена.

 

Кстати говоря так посмотрел там видимо маасив строк но ведь в 0 элементе хранится длина строки и сравнивать s[i,j] при j=0 нет смысла. Поэтому проще и логичнее сделать проверку на пустоту строки или length(ss)=0.

Изменено пользователем IRQ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

kissa, правильнее читать файл так:

 

Repeat
 // ReadFile
Until Not EoF(Filehandle);

 

:good:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне кажется правильнее while not eof а не repeat.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

привет!!! мне нужно из данного массива строк

Test COM V1.00_2

000000885;000000068;

000000794;000000208;

000000773;000000348;

000000816;000000489;

 

000000691;000000629;

000000688;000000770;

000000726;000000910;

000000596;000001051;

000000623;000001191;

000000630;000001332;

000000516;000001472;

 

000000573;000001612;

000000530;000001753;

000000435;000001893;

000000492;000002034;

000000417;000002174;

000000339;000002315;

000000413;000002455;

 

000000317;000002596;

000000272;000002736;

000000341;000002877;

000000230;000003017;

000000209;000003157;

000000271;000003298;

000000157;000003438;

 

сформировать массив из целых чисел 2х2, без разделителя ";". если есть какие идеи - поделитесь пожалуста. приведенный мной выше текст процедуры не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

привет!!! мне нужно из данного массива строк

<...>

сформировать массив из целых чисел 2х2, без разделителя ";". если есть какие идеи - поделитесь пожалуста. приведенный мной выше текст процедуры не работает.

 

Ну, вот примерно так:

 

const
 WordDelimiter : Char = ';'

var
 F : TextFile;
 InStr : String;
 Word1, Word2 : String;
 N, L : Integer;

Begin

L := 0;

AssignFile (F, FileName);

Repeat Begin

 ReadLn (F, InStr);
 N := Pos(InStr, WordDelimiter);
 try 
Word1 := Copy (InStr, 1, N-1);
Word2 := Copy (InStr, N+1, Length((InStr-N)-1));
Nums[L,0] := StrToInt (Word1);
Nums[L,1] := StrToInt (Word2);
Inc (L);
 except
// incorrect format
 end

End Until not EoF(F);

CloseFile (F);

End.

 

Это псевдокод, я пишу "по наитию". Пробуйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, вот примерно так:

 

 

 

спасибо огромное)))))))))))))))))))))))))))))))) <_<:)

 

вот правда одна полученная строка равна

 

Test COM V1.00_2

000000818;000000068;

000000772;000000208;

000000865;000000348;

000000732;000000489;

 

это из нее надо получить матрицу с n...количеством строк, но с 2 столбцами. исправила код

  AssignFile(f,'dannie.csv');
 reset(f);
 i:=0;
 m:=0;
 j:=0;
 Repeat Begin
 ReadLn (F, ss[i]);
label1: N := Pos(ss[i], WordDelimiter);
 try
Word1 := Copy (ss[i], 1, N-1);
ss[i] := Copy (ss[i], N+1, (Length(ss[i])-N));
stroka[m] := Word1;
Memo2.Text:= Memo2.Text + word1;
inc (m);
word1:='';
except
Memo2.Text:='Inkorected format';
 end;
if length(ss[i])>1 then goto label1;
  inc (i);
End Until not EoF(F);
  CloseFile(f);
  for i:=0 to m do
  writeln(f1,stroka[i]);
  closeFile(f1);

а вот сколько не бьюсь, переменная stroka пустая!!!!!!! почему?????? помогите пожалуйста!!!!!!!

Изменено пользователем kiss'a

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос к знатокам Билдера 6. Как в данной среде создать проект для программы с режимом DOS? Никак не могу понять. По умолчанию все настроено для визуального программинга, типа форм, всяких загол. файлов и прочее.

А вот как сделать проект в котором был бы токо файл CPP и при этом создавался бы исп. файл для работы проги в ДОС-режиме(т.е. режим черного окна)? Все перепробовал не получается. Как пример есть старый проект, котор. именно так реализован и в него я и вбиваю код, но как с нуля создать такое мне пока никто не можут сказать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в мастере создать консольное приложение

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо огромное)))))))))))))))))))))))))))))))) :(:)

<...>

а вот сколько не бьюсь, переменная stroka пустая!!!!!!! почему?????? помогите пожалуйста!!!!!!!

 

Опубликуйте файл, который парсите. И задание более детально опишите. Помогу Вам.

 

P.S. Вы ужасно формляете код, мутно. Читать такой - тяжко.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос к знатокам Билдера 6. Как в данной среде создать проект для программы с режимом DOS? Никак не могу понять. По умолчанию все настроено для визуального программинга, типа форм, всяких загол. файлов и прочее.

А вот как сделать проект в котором был бы токо файл CPP и при этом создавался бы исп. файл для работы проги в ДОС-режиме(т.е. режим черного окна)? Все перепробовал не получается. Как пример есть старый проект, котор. именно так реализован и в него я и вбиваю код, но как с нуля создать такое мне пока никто не можут сказать.

Помойму можно правда сделать через мастера. И есть какая-то директива что-то типа APPLICATION CONSOLE. По крайней мере в Delphi такая была.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

правда надо сказать там будет не только cpp но и проэктный файл и файл заголовка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас