0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 8
1

Работа со строками!!!!

13.12.2010, 14:43. Показов 574. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
написал программу, которая считает среднее геометрическое(вводится последовательность чисел подряд: 2859483 например).Последовательность должна заканчиваться нулем.Проблема вот в чем: программа считает только однозначные числа (от 1 до 9), т.е. если я введу 1 34 56 2 35 76 4 делфи это не поймет, он понимает только 5436783..Как я понял нужно вводить строку(числа через пробел), затем распознавать эти числа перегонять их в массив.Но не знаю как это сделать..((пробовал функции использовать как в паскале, не хочет работать!
Вот код программы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Bevel1: TBevel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Clear;
 Edit2.Clear;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
 s, b: string;
 i, k, l: integer;
 p: LongInt;
begin
 s:=Edit1.Text;
 k:=Length(s);
  If s[1]='0' then
   MessageDlg('Несблюдено условие', mtInformation, [mbOK],0)
  else
  If s[k]='0' then
    For i:=1 to k-1 do
     b:=b+s[i]
  else
   MessageDlg('Несблюдено условие', mtInformation, [mbOK],0);
 l:=Length(b);
  For i:=1 to l do
    p:=p+StrToInt(b[i]);
 Edit2.Text:=FloatToStr(p/l);
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
 Edit2.Clear;
end;
 
end.
 Комментарий модератора 
По правилам форума код следует оформлять с помощью соответствующих тегов. Код Delphi надо оформлять с помощью тегов: [ DELPHI ] - [ /DELPHI ] (без пробелов).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2010, 14:43
Ответы с готовыми решениями:

Работа со строками, заполнить компоненты строками из файла
Привет! Нужна помощь в заполнении формы В общем, есть форма отправки письма. У нее есть 2 функции,...

Работа со строками(операции над строками)
Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Работа со строками. Функции работы со строками
Дана строка символов. В заданном тексте определить позицию первой точки ‘ . ‘.

Задание по темам: ООП, исключения, работа со строками (возможно применение коллекций List), работа с компоновщиком
ТЯЖЕЛО РАБОТАТЬ С КОМПОНОВЩИКОМ. БУДУ РАД ВАШИМ ОТВЕТАМ. 1. Ознакомиться с принципом работы...

2
13101 / 5882 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
13.12.2010, 16:28 2
Извлечение чисел из строки.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
type
  TArr = array of Integer;
 
function ExtractNums(const aStr : String) : TArr;
const
  //Множество цифр.
  D = ['0'..'9'];
  //Величина приращения длины динамического массива.
  Capacity = 10;
var
  i, j, Pos1, Len : Integer;
begin
  Finalize(Result);
  
  Len := Length(aStr);
  Pos1 := 0;
  j := 0;
  for i := 1 to Len do begin
    //Пропускаем символы, которые не являются цифрами.
    if not (aStr[i] in D) then Continue;
    //Отслеживаем начало числа.
    if (i = 1) or ( not (aStr[i - 1] in D) ) then Pos1 := i;
    //Отслеживаем конец числа.
    if (i = Len) or ( not (aStr[i + 1] in D) ) then begin
      //Если требуется, увеличиваем длину динамического массива.
      if j = Length(Result) then SetLength(Result, j + Capacity);
      //Добавляем очередное найденное число в массив.
      Result[j] := StrToInt( Copy(aStr, Pos1, i - Pos1 + 1) );
      //Индекс следующего элемента массива.
      Inc(j);
    end;
  end;
 
  //Корректируем длину массива в соответствие с количеством
  //добавленных в него элементов.
  if j < Length(Result) then SetLength(Result, j);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Arr : TArr;
  i : Integer;
begin
  Arr := ExtractNums(Memo1.Text);
 
  //Показываем результат.
  Memo2.Clear;
  Memo2.Lines.Add('Числа, добавленные в массив:');
  for i := 0 to High(Arr) do begin
    Memo2.Lines.Add( IntToStr(Arr[i]) );
  end;
 
  //Удаляем динамический массив из памяти.
  //Это надо делать в явном виде только в случае, когда
  //элементы динамического массива принадлежат динамическим
  //типам. Длинные строки (AnsiString и WideString) являются динамическими
  //типами.
  //Для Delphi7 String = AnsiString.
  //Для Delphi 2009/2010 String = WideString.
  Finalize(Arr);
end;
Функция ExtractNums() извлекает все числа из строки и возвращает динамический массив, содержащий эти числа.
Пример применения представлен в TForm1.Button1Click() - берётся текст из Мемо1, с помощью ExtractNums() из него извлекаются все числа. Затем, полученные числа распечатываются в Мемо2.
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 8
14.12.2010, 15:07  [ТС] 3
Спасибо!!!Все работает)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2010, 15:07
Помогаю со студенческими работами здесь

Работа со строками
Вставить после вхождения строки str подстроку str1. Попытался сам сделать, но дальше этого...

Работа со строками
6. Напишите сценарий, в котором определяется количество &quot;счастливых&quot; шестизначных автобусных...

Работа со строками
Дана строка. Преобразовать все строчные1|прописные2 латинские3|русские4 буквы в...

Работа со Строками
Дана строка текста. Группы символов, разделенных одним или несколькими пробелами назовём...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru