|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Одномерные массивы
Доброго времени суток.
Есть задание по лабам: В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) сумму элементов массива с нечетными номерами; 2)сумму элементов массива, расположенных между первым и последним отрицательными элементами. Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями. Вот что пока что сделал: Код:
unit lab; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a:array[1..10] of real; summ:real; summd:real; i:integer; const n=10; begin summ:=0; summd:=0; for i:=1 to 10 do if i mod 2<>0 then summ:= summ + a[i]; Label1.Caption:='Сумма нечетных элементов: ' + FloatToStr(summ); end; end. компилируется нормально, но при вычислении выходит число, к-е не может быть результатом вычисления. Последний раз редактировалось Rinat41, 02.06.2011 в 21:53. |
#2
|
||||
|
||||
ну..... по идее на выходе должен быть ноль(это если бы массив был глобальным), но так как массив объявлен в процедуре, то хз что там на выходе может получиться. хотя бы присвойте элементам массива значения перед вычислением
|
#3
|
|||
|
|||
а разве когда набираю числа с клавы во время выполнения, разве тогда не присваиваются?
|
#4
|
||||
|
||||
у вас массив объявлен в процедуре, и он виден только в процедуре. попробуйте в секции VAR обьявить
|
#5
|
|||
|
|||
так?
Код:
var Form1: TForm1; a:array[1..10] of real; implementation теперь выводит "0" |
#6
|
||||
|
||||
Дополнительно: убрать массив из процедуры, вынести присвоение метки за цикл.
А "0" и должен быть, ведь теперь массив глобальный, а глобальные переменные при старте инициируются нулями. Последний раз редактировалось angvelem, 02.06.2011 в 21:55. |
#7
|
|||
|
|||
ээ, извините, не понял, я круглый новичок(
|
#8
|
||||
|
||||
скиньте участок кода, где происходит присваивание элементам массива значения
|
#9
|
||||
|
||||
Ну так и пиши, что именно не понял.
|
#10
|
||||
|
||||
Цитата:
Он вообще-то вне цикла |
#11
|
|||
|
|||
весь код уже здесь. значения ввожу с клавы.
не понял как вынести присвоение метки за цикл |
#12
|
||||
|
||||
Цитата:
|
#13
|
||||
|
||||
Цитата:
Выносить ничего не нужно, уже все вынесено (мозг тоже ) таааааааак ......как вводите значения силой мысли что ли??? |
#14
|
||||
|
||||
Ну примерно так можно инициировать массив на старте
Код:
procedure TForm1.FormCreate(Sender: TObject); begin for I := 1 to 10 a[i] := Random; end; |
#15
|
||||
|
||||
Цитата:
можно так, но! Как уважаемый автор темы будет проверять результат, не зная чему равны значения...... ?? правильно!!! Предварительно вывести их значения в той или иной форме, но это уже не по теме |