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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.10.2008, 11:32
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
Вопрос Помогите с массивом

В университете учил Delphi, но уже всё забыл.

Дело в том, что нужно сделать программку, которая принимает числа (заранее кол-во чисел неизвестно), потом вычисляет из них среднее арифметическое.

Примерное условие: Ученик получает оценки. Вводим все оценки по очереди и выводим средний балл. Представил форму, как на рисунке. Кнопки "О программе.." и "Выход" сделал. А вот как быть с циклом и массивом? Я уже не помню. Помогите, пожалуйста..
Изображения
Тип файла: jpg Безымянный.JPG (50.0 Кбайт, 13 просмотров)
Ответить с цитированием
  #2  
Старый 26.10.2008, 12:54
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Можно:
1) Создать статический массив например длиною в 100 позиций и в цикле прогонять
2) Создать динамический массив и каждый раз у пользователя спрашивать о числе вводимых оценок
3) Самый опитмальный: использовать Борландовскую структуру TStrings. Добавлять в нее строку командой Add и затем в цикле от 0 до Count-1 считывать и суммировать

Также можно в окно ввода вводить сразу все оценки через какой-нибудь зарезервированный символ, например, запятая и в цикле анализировать уже строку
Ответить с цитированием
  #3  
Старый 26.10.2008, 14:26
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
По умолчанию

А с кодом не можешь помочь?
Там чё-то коротенькое должно быть, минимальное..
Хотя бы как цикл написать..
Ответить с цитированием
  #4  
Старый 26.10.2008, 14:40
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

Код:
var
  sum : integer;
  stl : TStrings;
begin
  stl := TStrings.Create;
//nen добавлене значений в stl
  for i := 0 to high(stl) do 
    Sum := sum + StrToInt(stl);
  sum := Round(sum / stl.count)

Как то так)
__________________
Delphi - это лишь инструмент, а что ты сможешь создать при помощи этого инструмента, зависит исключительно от тебя.

Последний раз редактировалось Alexo, 26.10.2008 в 17:12.
Ответить с цитированием
  #5  
Старый 26.10.2008, 15:18
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
По умолчанию

Это если одну строку обрабатывать?

П.С. А как написать, чтобы цикл выполнялся до нажатия Батона2?
Ответить с цитированием
  #6  
Старый 26.10.2008, 15:32
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

Это если весь обьект TStrings, а там может быть куча строк.

ввести булевую переменную и при каждом проходе цикла проверять, а по нажатию кнопки изменять значение переменной.
Код:
if bStop then
  break;
application.processmessages;
Ответить с цитированием
  #7  
Старый 26.10.2008, 15:43
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
По умолчанию

Посмотри на форму и прочитай..

При нажатии "Ещё" будет очищаться поле ввода и цифра заносится в массив. Когда будет введена последняя цифра, то пользователь нажимает "Средний бал" и Label.Caption присвается среднее значение.
Ответить с цитированием
  #8  
Старый 26.10.2008, 15:47
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

Цитата:
Хотя бы как цикл написать..

цикл я написал, как останавливать его по нажатию кнопки тоже написал. На форме кстати ненаписанно что делает кнопка еще.

вводить по одной цифре удобно наверное если их пара штук проще сделать разделитель и парсить строку.

Последний раз редактировалось Alexo, 26.10.2008 в 15:50.
Ответить с цитированием
  #9  
Старый 26.10.2008, 16:02
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
По умолчанию

Парсить? Бррррррррррррр.. Я в этом чайник.. Всё что пока у меня выходит -
Код:
procedure TForm1.Button1Click(Sender: TObject); // "Ещё"
begin
// какой-то цикл должен быть!!! ----------
sum:=a+a;
a:=StrToInt(Edit1.Text);
Edit1.Text:='';
// а тут он должен заканчиваться!!! ----------
end;

procedure TForm1.Button2Click(Sender: TObject); // "Средний балл"
begin
sr:=sum/i;
Label2.Caption:=FloatToStr(sr);
end;
Ответить с цитированием
  #10  
Старый 26.10.2008, 16:04
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

ты даже не пытался сделать то что тебе сдесь написали

в твоем случае только stl надо сделать глобальной.
Ответить с цитированием
  #11  
Старый 26.10.2008, 16:10
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
Печаль

Цитата:
Сообщение от Alexo
ты даже не пытался сделать то что тебе сдесь написали
Я просто не понимаю куда это всё нужно пихать! Я в этом чайник.
Цитата:
Сообщение от Alexo
в твоем случае только stl надо сделать глобальной.
И в этом.. Вот чё это значит?
Ответить с цитированием
  #12  
Старый 26.10.2008, 16:21
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

Код:
var
...
stl : TStrings;

procedure TForm1.Button1Click(Sender: TObject); // "Ещё"
begin
stl.Add(Edit1.text);
Edit1.Text:='';
end;

procedure TForm1.Button2Click(Sender: TObject); // "Средний балл"
var
  sr : real;
  i : integer;
begin
  for i := 0 to stl.Count - 1 do
    sr := sr + StrToInt(stl.string[i]);
  sr := sr / stl.Count;
  Label2.Caption:=FloatToStr(sr);
end;

в Formcreate написать
stl := TStrings.Create;
в formdestroy
stl.free;
Ответить с цитированием
  #13  
Старый 26.10.2008, 16:48
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
Печаль

Цитата:
Сообщение от Alexo
в Formcreate написать
stl := TStrings.Create;
в formdestroy
stl.free;

Это я правильно понял?
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
stl := TStrings.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
stl.free;
end;

Если правильно, то
Код:
   sr:=sr+StrToInt(stl.string[i]);
после слова СТРИНГ останавливается и..

[Error] Unit1.pas(59): Identifier expected but 'STRING' found
[Warning] Unit1.pas(66): Constructing instance of 'TStrings' containing abstract method 'TStrings.Clear'
[Fatal Error] Srednii_ball.dpr(5): Could not compile used unit 'Unit1.pas'

Ответить с цитированием
  #14  
Старый 26.10.2008, 16:50
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

исправь на Strings
Ответить с цитированием
  #15  
Старый 26.10.2008, 17:04
Маратович Маратович вне форума
Прохожий
 
Регистрация: 26.10.2008
Сообщения: 9
Репутация: 10
По умолчанию

Приложение запускается..
Но не работает
Скинь асю в личку..
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter