Перейти к содержанию

Помогите завершить программу по Паскалю


Рекомендуемые сообщения

Здравствуйте! Помогите пожалуйста завершить программу: "Дана строка символов. Подсчитать сколько среди символов данной строки встречается буква x".

Вот программа:

program lab;
uses crt;
var s1:string [10];
i,j:integer;
begin
writeln ('vvedite stroku');
readln (s1);
i:=length (s1);
for j:=1 to i do
If s1[j]='x' then
writeln (s1[j]);
end.

. Заранее благодарен!!!

Ссылка на комментарий

ну и сразу для развития:

uses crt;
var s1 : string; {означает, что длина максимальная длина строки будет 255, а не как ранее было 10}
j, c : integer;
begin
writeln ('vvedite stroku');
readln (s1);
{уберем вот это i:=length (s1); потому что можно сразу написать так}
for j:=1 to length(s1) do
If s1[j]='x' then inc(c);
writeln (c);
end.

в коде убрал еще c:=0; - при инициализации глобальных переменных (т.е. в var основной программы) переменные принимают значения 0. поэтому можно не писать это дважды.

а в целом код очень даже нормальный, даже кажется, что человек действительно хочет сделать сам.

ЗЫ inc© равнозначно c:=c+1.

Ссылка на комментарий

а в целом код очень даже нормальный, даже кажется, что человек действительно хочет сделать сам.

Согласен, удивляют и отступы. Даже поверил в светлое будущее.

Мне кажеться, что практичнее было бы:


len := length(s1);
for j:=1 to len do
if s1[j]='x' then
inc(c);

Так длина s1 будет вычисляться только один раз, или это чисто сишный прикол? Паскаль откровенно говоря подзабыл.

Ссылка на комментарий

   Ничего подобного, в паскале вычислится 1 раз. В паскале запрещено менять границы цикла for. Так что высчитываться будет 1 раз =)

Ссылка на комментарий
   Ничего подобного, в паскале вычислится 1 раз. В паскале запрещено менять границы цикла for. Так что высчитываться будет 1 раз =)

Спасибо, запомним. А то сишная параноя на оптимизацию дает знать о себе.

Ссылка на комментарий

ну и сразу для развития:

в коде убрал еще c:=0; - при инициализации глобальных переменных (т.е. в var основной программы) переменные принимают значения 0. поэтому можно не писать это дважды.

Не на всех версиях Pascal'я происходнит "обнуление" переменных. Тем более что в процедурах и функциях, такого не происходит вообще, на сколько я знаю :P Интересно, каково потребление ресурсов при двойной инициализации перменных? Так ли ощутимо?

Ссылка на комментарий
Тем более что в процедурах и функциях, такого не происходит вообще
при инициализации глобальных переменных

на каком это паскале не происходит обнуление глобальных переменных? можно сцыль?

Ссылка на комментарий

Вот же ж блин! :) Про глобальные - пардон, а ведь действительно даже в TurboPascal 1.0 глобальные перменные обнуляются. Во всяком случае, переменные типа integer. Хм... но я же стопудово помню, как наши любимые преподаватели (один, не все) предупреждали, что такое происходит только с шестой версии турбопаскаля.

Виноват.

Ссылка на комментарий

Помогите кто-нибудь составить программу, на тему: Обработка строк.

Вот текст задачи: Дан текст длиной 10 символов. Слова текста разделены пробелом. Сформировать новый текст, включив в него слова заданного и разделив их двумя пробелами.

Зарание спасибо.

Ссылка на комментарий
program lab;
uses crt;
var s1,s2:string;
i:integer;
begin
clrscr;
writeln('vvedite stroku');
readln(s1);
for i:=1 to length(s1) do //начинаем цикл от первого символа до конца строки
begin
s2:=s2+s1[i]; //добавляем текущий символ в новую строку
If s1[i]=' ' then s2:=s2+' '; //Если текущий смвол равен пробелу, добавляем сверху ышо один
end;
writeln(s2);
end.

Ссылка на комментарий

Помогите пожалйста! Нужно найти одинаковый элемент в двух разных массивах и индексы должны быть одинаковы. Плииз

for i:=1 to n do
for j:=1 to n do
if a[i]=b[j] to then do begin g:=g+1; h:=h-1;
end;
for i:=1 to n do
for j:=1 to n do
writeln('вывод',a[i],b[j], g, h );
end.

Добавлено спустя 1 минуту 15 секунд:

А что в паскале a=b[j] не проканает? а как записать?

Ссылка на комментарий

Кароче вот условие: "Коровы и быки". Программа выбирает с помощью датчика случайных чисел четырехзначное число с разными цифрами. Угадать это число. На каждом шаге играющий называет четырехзначное число, а программа сообщает, сколько цифр числа угадано ("быки") и сколько цифр угадано и стоит на нужном месте ("коровы"). Например, если программой задано число 1294, а играющий назвал 1423, он получит ответ: "1 корова, 3 быка".

Думаю надо использовать такой метод)

program igor;
uses crt;
const n=3;
var a:array[1..n] of integer;
b:array[1..n] of integer; i,g,z,h,j:integer;
begin
clrscr;
randomize;
for i:=1 to n do
a[i]:=random(100);
writeln('Введите 4 число');
for j:=1 to n do
read(b[j]);
begin
h:=4;
g:=0;
for i:=1 to n do
for j:=1 to n do
if a[i]=b[j] to then do begin g:=g+1; h:=h-1;
end;
for i:=1 to n do
for j:=1 to n do
writeln('вывод',a[i],b[j], g, h );
end.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...