• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задачи на строки

Эта ошибка говорит, что управляющая переменная несоответствующего типа, попробуйте переменную i определить как Integer
Алекс, так я это первым делом (#16) предложил. Нет, похоже у народа проблемы с функцией Length. Вот тут http://www.tehnari.ru/f43/t52889/ опять же... Не могу взять в толк - в чем дело?
 
Вот что пишет:

Invalid FOR control variable:

The FOR Statement control variable must must be a simple variable defined in the declaration part of the current subprogram.
 
Вот что пишет:

Invalid FOR control variable:

The FOR Statement control variable must must be a simple variable defined in the declaration part of the current subprogram.
Хорошо. Попробуйте вот что:
1. Ввести еще переменную
L:Integer;
2. Строку
For i:=1 to Length(S) do
замените двумя:
L:=Length(S);
For i:=1 to L do
Может быть, так сожрёт?
 
у меня на трех реализациях (BorlandPascal, FreePascal и школьный пакет) исходный код нормально компилится, скорее всего, проблема в среде, используемой ТС :(
 
теперь ошибка сдесь: For i:=1 to L do (error42: error in expression)
 
РАБОТАЕТ!!!!!! СПАСИБО!!!! ОГРОМНЕЙШЕЕ!!!!!!! люблю вас!!!!!
 
Вот что получилось:

VAR
S,s1:String;
L:Integer;
i,n,Sum,Code:Integer;
BEGIN
Writeln('Enter the string:');
Readln(S);
Sum:=0;
L:=Length(s);
For i:=1 to L do
begin
S1:=s;
Val(S1,n,Code);
Inc(Sum,n);
end;
Writeln('Sum= ',Sum);
Readln
END.
 
Вот что получилось:

VAR
S,s1:String;
L:Integer;
i,n,Sum,Code:Integer;
BEGIN
Writeln('Enter the string:');
Readln(S);
Sum:=0;
L:=Length(s);
For i:=1 to L do
begin
S1:=s;
Val(S1,n,Code);
Inc(Sum,n);
end;
Writeln('Sum= ',Sum);
Readln
END.

Ну и ладно. Можно немного причесать, например вместо
L:Integer;
i,n,Sum,Code:Integer;
записать просто
i,n,Sum,Code,L:Integer;

Но не обязательно.
 
Владимир, прошу еще Вашей помощи в последний раз...
Вот задачка:
Протабулироавать функцию y=|cosx²-0,51|sin(3x-4)-4,44 на отрезке [0;7] с шагом h=0,1x7. Результат вывести в виде таблицы. Определить сумму всех положительных значений функции Y и количество отрицательных.
 
функция y=|cos(x*x)-0,51|sin(3x-4)-4,44
Ох, ну до чего это утомительно, когда в условии задачи явный брёх! Простейший анализ формулы показывает, что никаких положительных значений там в принципе быть не может!!! Судите сами:
1. Под знаком модуля - косинус чего-то минус 0.51, т.е. максимальное значение - около 1.5.
2. Дальше это дело умножается на синус чего-то, неважно чего, имеющий максимальное значение 1. Произведение этих двух сомножителей дает максимальное значение 1.49.
3. И теперь из этого вычитается 4.44. И откуда положительным величинам взяться?
Ну ладно, моё дело - сторона. Вы дали такое условие - получите:
Код:
Const
 Xmin=0;
 Xmax=7.0;
 DX=0.7;
VAR
 N,i,Num:Integer;
 x,Sum:Real;

Function Y(Xy:Real):Real;
begin
 Y:=Abs(Cos(Sqr(Xy))-0.51)*Sin(Xy*3-4)-4.44;
end;

BEGIN
 N:=Round((Xmax-Xmin)/DX);
 Writeln('   x         y');
 Sum:=0;
 Num:=0;
 For i:=0 to N do
  begin
   x:=Xmin+DX*i;
   Writeln(x:5:1,Y(x):12:5);
   If Y(x)>0 then Sum:=Sum+Y(x);
   If Y(x)<0 then Num:=Num+1;
  end;
 Writeln;
 Writeln('Sum of positive values is ',Sum:10:3);
 Writeln('Number of negative values is ',Num);
 Readln
END.
 
Еще раз всем ПРИВЕТ!!!!! нужно помощь, срочно!!!! :tehnari_ru_121:
нужно объяснение строчкам!!!!

задача 22: дана строка изображающая целое положительное число. Вывести сумму цифр этого числа.

VAR
S,s1:String;
L,i,n,Sum,Code:Integer;
BEGIN
Writeln('Enter the string:');
Readln(S);
Sum:=0;
L:=Length(s);
For i:=1 to L do
begin
S1:=s;
Val(S1,n,Code);
Inc(Sum,n);
end;
Writeln('Sum= ',Sum);
Readln
END.
 
Пожалуйста:
VAR {Задаем переменные (параметры) программы}
S,s1:String; {Вводим две переменные типа "Строка"}
L,i,n,Sum,Code:Integer; {Ещё вводим несколько целочисленных}
BEGIN {Начинаем}
Writeln('Enter the string:'); {Компьютер просит вести строку }
Readln(S); {Вводим стоку}
Sum:=0; {Будущей сумме цифр присваиваем исходное значение "0"}
L:=Length(s); {Переменной L присваиваем значение, равное количеству символов во введенной строке, в данном случае - количеству цифр числа }
For i:=1 to L do {Объявляем цикл посимвольного перебора введенной строки}
begin {Начинаем этот цикл}
S1:=s; {Строковой переменной S1 присваиваем значение текущего (i-того) символа строки, в данном случае - символа знака цифры. Эта строка - на всякий случай; не все версии Паскаля допускают непосредственную подстановку символа (а не строки) в оператор Val}
Val(S1,n,Code);{Преобразуем символ S1 в число (цифру) n. Параметр Code отражает наличие или отсутствие ошибок при этой операции; его использование (или неиспользование) - на усмотрение программиста. В данном случае он никак не обрабатывается, но вводить его всё равно надо}
Inc(Sum,n); {Увеличиваем искомую сумму Sum на величину n}
end;{Конец цикла по цифрам исходного числа}
Writeln('Sum= ',Sum);{Вывод результата (полученной суммы) на экран}
Readln {Останов, чтобы можно было на этот результат посмотреть}
END. {Всё!}
 
Хорошо, спасибо большое!!!!!

Во эту строку:
Inc(Sum,n);
можно записать так:
Sum:=Sum+n;
да?и буде тоже самое

А что с этой строкой:
Val(S1,n,Code);
 
Хорошо, спасибо большое!!!!!

Во эту строку:
Inc(Sum,n);
можно записать так:
Sum:=Sum+n;
да?и буде тоже самое
Абсолютно.
А что с этой строкой:
Val(S1,n,Code);
В каком смысле - что? Я же вроде подробно расписал про эту строку. Если интересуетесь, можно ли заменить чем-нибудь - ответ, увы, отрицательный.
А вообще
VAL(S,N,Code) (преобразование строки в число) и
STR(N,S) (обратное преобразование) - это стандартные процедуры Паскаля.
 
Ясно!!! Thanks!!!! :tehnari_ru_182:
 
Назад
Сверху