IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на последовательность,где ошибка?
Skyriver
сообщение 1.02.2009 21:28
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Даны целые числа а1 , а2 .... .Известно , что а1>0 и что среди а1 , а2 ... есть хотя бы одно отрицательное число
.Пусть а1, ... аn - члены данной последовательности ,предшествующие первому отрицательному члену (n заранее известно).Получить max((а1)^3) ,.....,((an)^3).


Program Zadanie4;
Uses wincrt;
var i,n,s:integer;
var a:array[1..100] of integer;
Begin
s:=0;
Writeln('Vvedite kolichestvo elementov');
Read(n);
Writeln('Vvedite elementy');
For i:=1 to n do
read(a[i]);
While (a[i]>0) do
s:=(a[i]*a[i]*a[i])+s;
Writeln('Polucheny dannye:',s)
End.



где ошибка? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 6)
bura
сообщение 1.02.2009 21:38
Сообщение #2





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Ошибки в программе нет, только она написана для другой задачи: найти сумму членов последовательности, предшествующих первому отрицательному или нулевому элементу последовательности.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.02.2009 21:44
Сообщение #3


Гость






Цитата
найти сумму членов последовательности, предшествующих первому отрицательному или нулевому элементу последовательности.
Как минимум - "найти сумму КУБОВ членов последовательности..."
 К началу страницы 
+ Ответить 
Skyriver
сообщение 1.02.2009 21:52
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 1.02.2009 22:44) *

Как минимум - "найти сумму КУБОВ членов последовательности..."

Усвоил.

Можете помочь еще вот с чем.Надо удалить из строки последний знак препинания.
вот то что получилось только оно почему то удаляет не последний а все.

Program Zadanie6;
uses wincrt;
VAR STR:string;
L,I,K:INTEGER;
M:SET OF CHAR;
Begin
M:=['.',',','!','?','-',';',':'];
Writeln ('Vvedite stroku: ');
Readln (STR);
L:=Length(STR);
For i:=1 to l do
If STR[I] in M then
Delete(str,i,1);
Writeln('Poluchena stroka:',str)
End.



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.02.2009 23:02
Сообщение #5


Гость






Цитата
оно почему то удаляет не последний а все.
Вообще-то это не ОНО, а ты удаляешь все. Надо было удалять последний - сделал бы так:
      For i:=1 to l do
If STR[I] in M then K := i;
Delete(s, k, 1);
или обратным проходом по строке до первого встреченного знака препинания, с помощью цикла While, если не хочется делать лишние итерации...

Цитата
Усвоил.
Что именно? Это было уточнение предыдущего поста, тебе же (для того, чтобы решить поставленную задачу) надо добавить еще 2 строки.

Добавлено через 1 мин.
P.S. Вообще-то "Одна тема - один вопрос", если что...
 К началу страницы 
+ Ответить 
Skyriver
сообщение 1.02.2009 23:07
Сообщение #6





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 2.02.2009 0:02) *

Вообще-то это не ОНО, а ты удаляешь все. Надо было удалять последний - сделал бы так:
      For i:=1 to l do
If STR[I] in M then K := i;
Delete(s, k, 1);
или обратным проходом по строке до первого встреченного знака препинания, с помощью цикла While, если не хочется делать лишние итерации...

Что именно? Это было уточнение предыдущего поста, тебе же (для того, чтобы решить поставленную задачу) надо добавить еще 2 строки.

Добавлено через 1 мин.
P.S. Вообще-то "Одна тема - один вопрос", если что...

Тогда закрывайте тему,спасибо что помогли
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bura
сообщение 2.02.2009 12:33
Сообщение #7





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Задача на обработку строк:
Код

var
STR:string[80];
L,I,K:BYTE;
M:SET OF CHAR;
Begin
M:=['.',',','!','?','-',';',':'];
Write('Vvedite stroku: ');
Readln (STR);
L:=byte(STR[0]);
For i:=L downto 1 do
   If STR[I] in M then
    begin
     K:=i;
     break;
    end;
if i<>0 then
  Delete(str,k,1);
Writeln('Poluchena stroka:',str);
readln;
End.


Что же до задач на последовательность, то там вообще можно обойтись без массива.
Потом, ты пишешь:
Код

While (a[i]>0) do
  s:=(a[i]*a[i]*a[i])+s;

В итоге у тебя получается, что в первой строчке a[i] сравнивается с 0. А чему при этом равно i? Оно равно n+1.
То есть, несуществующий элемент массива сравнивается с 0. Потом, как у тебя к сумме могут добавляться значения элементов массива в кубе при неизменяющемся i?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"