Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2009, 01:21   #1
MyaSnIKs
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 28
По умолчанию массивы 1 задач (дельфи 7)

1. Заменить в одномерном числовом массиве нечетные элементы на соседние четные числа.

2. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а. номер минимального элемента массива;
б. сумму элементов массива, расположенных между первым и
вторым отрицательными элементами.

С первой вообще не лады, прошу очень помочь.
___________________________________ _________
А вторую первую часть я сделал, а вот с "б" не мог ли кто-нибудь помочь, у меня вроде получилось написать, но мне что-то косячным кажется.

У меня вот так, подправьте где нужно, или где лишнее(задание 2б):

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
i,b,j,p:integer;
c:byte;
begin
c:=1;
b:=0;
for i:=1 to n do
a[i]:=strtoint(stringgrid1.cells[i-1,0]);
for i:=1 to n do
if (a[i]<0) and (c=1) and (i<n) then
begin
for j:=i+1 to n do
If a[j]>0 then begin
b:=b+a[j];
c:=0;
end else
If a[j]<0 then begin
a[j]:=0;
a[j+1]:=0;
label3.Caption:=inttostr(b);

Последний раз редактировалось Stilet; 16.03.2009 в 09:44.
MyaSnIKs вне форума Ответить с цитированием
Старый 16.03.2009, 09:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну если уж править то примерно так. Код не проверял
Код:
procedure TForm1.Button3Click(Sender: TObject);
var s:inteher; b:false;
begin
s:=0;
for i:=1 to StringGrid1.RowCount-1 do begin
 if (a[i]<0) then b:=not b;
 if b then s:=s+s[i] else
  if s<>0 then break
end;
label3.Caption:=inttostr(s);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2009, 10:47   #3
MyaSnIKs
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 28
По умолчанию

а что с первой делать?=(
для второй задачи, как бы мой код тоже работает нормально,просто я сращивал пару своих задач и мне показалось, что немного лишнего вышло.
а "b:false;" он спрашивает expression expected , что делать?я эту команду вообще первый раз вижу=)

Последний раз редактировалось MyaSnIKs; 16.03.2009 в 10:53.
MyaSnIKs вне форума Ответить с цитированием
Старый 16.03.2009, 11:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну перепутал малость. b - логическая переменная.
Цитата:
а что с первой делать?=(
Код в студию - поправим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2009, 13:33   #5
MyaSnIKs
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 28
По умолчанию

Код:
n:=strtoint(edit1.text);
for i:=1 to n do
a[i]:=strtofloat(stringgrid1.cells[i-1,0]);
for i:=1 to n do
if a[i]-"нечётное" then begin
"заменить на ближайшее следующее чётное"
end;
for i:=1 to n do
StringGrid1.Cells[i-1,0]:=Floattostr(a[i]);
end;
и я не знаю как создать это условие(это для первой)
___________________________________-
Код:
procedure TForm1.Button3Click(Sender: TObject);
var s:inteher; b:false;
begin
s:=0;
for i:=1 to StringGrid1.RowCount-1 do begin
 if (a[i]<0) then b:=not b;
 if b then s:=s+s[i] else
  if s<>0 then break
end;
label3.Caption:=inttostr(s);
код как бы работает но не останавливается когда встречает второе отрицательное значение, складывает от первого до последнего

___________________________________ __
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
i,b,j:integer;
begin
b:=0;
for i:=1 to n do
a[i]:=strtoint(stringgrid1.cells[i-1,0]);
for i:=1 to n do
if (a[i]<0)and (i<n) then
begin
for j:=i+1 to n do
If a[j]>0 then begin
b:=b+a[j];
end else
If a[j]<0 then begin
a[j]:=0;
a[j+1]:=0;
label3.Caption:=inttostr(b);
end;
end;
end;
end.
а в моём всё работает только не знаю как сделать, чтобы если, например, числа идут -1 -2 2 2 2 -4 -5, чтобы он сумировал -2 до -5.

Последний раз редактировалось MyaSnIKs; 16.03.2009 в 13:54.
MyaSnIKs вне форума Ответить с цитированием
Старый 16.03.2009, 13:51   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

if a[i] mod 2=0 then четное
Цитата:
но не останавливается
Например так
if (a[i]<0) then begin
b:=not b;
if s<>0 then break
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2009, 13:55   #7
MyaSnIKs
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 28
По умолчанию

Например так
if (a[i]<0) then begin
b:=not b;
if s<>0 then break
end;

у тебя так и написано=)
Он не останавливается=)

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
n:=strtoint(edit1.text);
for i:=1 to n do
a[i]:=strtoint(stringgrid1.cells[i-1,0]);
for i:=1 to n do
if a[i] mod 2=1 then
If a[i+1] mod 2=0 then begin
a[i]:=a[i+1];
end;
for i:=1 to n do
StringGrid1.Cells[i-1,0]:=Floattostr(a[i]);
end;
end.
я написал, он у меня заменяет, но, если такая картина, как : 11234, то заменяет на 12244, а первую единицу не меняет, как сделать, чтобы он через одну поменял?

Последний раз редактировалось MyaSnIKs; 16.03.2009 в 14:15.
MyaSnIKs вне форума Ответить с цитированием
Старый 16.03.2009, 15:05   #8
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от MyaSnIKs Посмотреть сообщение
1. Заменить в одномерном числовом массиве нечетные элементы на соседние четные числа.
т.е. в массиве 123 что надо сделать? заменить 1 и 3 на 2?

по-моему ваша логика не совсем состоятельна, если a[n]=3 на что оно заменится?
Пол-жизни сидючи, в монитор глядючи...

Последний раз редактировалось Stilet; 16.03.2009 в 15:24.
Last вне форума Ответить с цитированием
Старый 16.03.2009, 15:16   #9
MyaSnIKs
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 28
По умолчанию

заменить 1 на 2 а 3 не трогать(у меня делает)
а если бы было 1234, то заменить 1 на 2, а 3 на 4(у меня делает)
а если 11234, то первые две единицы на 2, а 3 на 4(у меня не делает=))
вот с полследним если можешь, помоги плиз, или напиши свой вариант проги

у меня точно такой же код как у тебя=)
там выше написано,с таким кодом, не получается
"а если 11234, то первые две единицы на 2, а 3 на 4(у меня не делает=))"

Последний раз редактировалось MyaSnIKs; 17.03.2009 в 05:53.
MyaSnIKs вне форума Ответить с цитированием
Старый 16.03.2009, 15:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у тебя так и написано=)
Ошибаешся, внимательно смотри. Впрочем если такой вариант не устраивает вот другой.
Код:
const a:array[1..5] of integer=(-1,2,3,-4,5);
 var i,s:integer;b:boolean;
begin
s:=0;
i:=0; while i<5 do begin
inc(i);
 while a[i]>0 do  inc(i);    inc(i);
 while a[i]>0 do begin  s:=s+a[i];  inc(i);  end;
 break;
end;
Caption:=inttostr(s);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Помогите пожалуйстьа решить несколько задач в Паскале (МАССИВЫ) VisTBacK Помощь студентам 20 20.02.2009 08:32
Помогите плз решить 5 задач через массивы! sp.caster Помощь студентам 2 17.02.2009 12:24
Дельфи DBGrid! nur БД в Delphi 8 18.07.2008 11:45