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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2007, 19:37   #1
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию Hайти натуральное i, что s[i] - последняя по порядку запятая - Паскаль

Даны натуральное число n, символы s[1],...,s[n]. Известно, что
среди s[1],...,S[n] есть по крайней мере одна запятая. Hайти та-
кое натуральное i, что s[i] - последняя по порядку запятая.

Код:
Program zap;
uses crt;
var
s:string;
a:array[1..15] of integer;
j,i,n:integer;
begin clrscr;
readln (s);
n:=length(s);
for i:=1 to n do
if s[i]=',' then
writeln (i,' ',s[i]);
readln;
end.
Выше преведенный программный код находит каждую запятую, а мне нужно, что бы он находил последнюю. Подправьте код, пожалуйста.
profi вне форума Ответить с цитированием
Старый 28.11.2007, 19:53   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Код:
var s: string;
    i, n, z: integer;
begin
readln (s);
n:=length(s);
for i:=1 to n do
 if s[i] = ',' then z := i;
Writeln (z);
Readln;
end.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 28.11.2007, 20:00   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Нужно скопировать строку задом наперед и найти pos(',',s).
Искомое число будет равно length(s)-pos(',',s)+1.
Вот нормальный код.
Код:
uses crt;
var s,s1:string;
    i,n:integer;
begin
  clrscr;
  write('Stroca: ');readln(s);
  n:=length(s);
  s1:='';
  for i:=1 to n do  begin
     s1:=s1+s[n-i+1];end;
  i:=n-pos(',',s1)+1;write('i=',i);readln;
  end.

Последний раз редактировалось puporev; 29.11.2007 в 09:35.
puporev вне форума Ответить с цитированием
Старый 29.11.2007, 19:36   #4
Dianochka
Пользователь
 
Регистрация: 29.11.2007
Сообщений: 32
По умолчанию

Не буду создавать новую тему напишу здесь
Дан текстовый файл. Создать другой текстовый файл, в котором все слова исходного файла выписаны "задом наперед".

Плизз подскажите кто-нибудь

зарание Спасибо.
Dianochka вне форума Ответить с цитированием
Старый 29.11.2007, 20:20   #5
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Вот держи!
Код:
program textfile;
uses crt;
var
g,f:text;
c,i:integer;
ss,s,b:string;
begin
clrscr;
assign(f,'text.txt');
reset(f);
assign(g,'NEWTEXT.txt');
rewrite(g);
while not eof(f) do begin
readln(f,s);
c:=length(s);
for i:=1 to c do begin
b:=copy(s,i,1);
if b<>' ' then ss:=b+ss else begin
write(g,ss,' ');
ss:=''; end;
end;
writeln(g,'');
end;
close(f);
close(g);
readkey;
end.
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 29.11.2007, 21:09   #6
Dianochka
Пользователь
 
Регистрация: 29.11.2007
Сообщений: 32
По умолчанию

Большое спасибо)
Dianochka вне форума Ответить с цитированием
Старый 29.11.2007, 21:28   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вообще то программа Tayfunа переставляет не слова, а все буквы.
Например "шел снег" превращает в "гесн леш", а надо по условию задачи "снег шел". Да и то я ввел в текст три слова, а на выходе только два. Поэтому посмотри этот код, он выдает так, как я понял. (комментарии для топик-стартера) .
Код:
В папке BIN создайте текстовый файл (в блокноте), дайте ему имя First.
Напишите несколько слов через пробелы.
Затем пишите программу.
program reset;
uses crt;
var F,R:text;      входной и выходной файлы
    s,s1:string;
    i,k:integer;
    s2:array[1..100] of string;
begin
  clrscr;
  assign(F,'First.txt');     открываем входной файл для чтения
  reset(f);
  assign(R,'Reset.txt');     создаем и открываем выходной файл для записи
  rewrite(R);
  while not eof(F) do
     begin
       read(F,s);    читаем информайию из входного файла и заносим ее в строку s
     end;
k:=1;
for i:=1 to length(s) do begin
if s[i]=' ' then k:=k+1 else s2[k]:=s2[k]+s[i]; создаем массив слов
end;
for i:=k downto 1 do begin         переворачиваем его
s1:=s1+s2[i]+' ';
end;
write(R,s1);         записываем в выходной файл
close(F);
close(R);
end.
puporev вне форума Ответить с цитированием
Старый 29.11.2007, 21:53   #8
Dianochka
Пользователь
 
Регистрация: 29.11.2007
Сообщений: 32
По умолчанию

Ок да ты прав, надо чтобы выводил слова наоборот.
Спасиб что заметил))
Dianochka вне форума Ответить с цитированием
Старый 30.11.2007, 21:07   #9
Dianochka
Пользователь
 
Регистрация: 29.11.2007
Сообщений: 32
По умолчанию

в текстовом файле встречаютсябуквы и цыфры надо выбрать только цифры. забыла какая функция отличает цифры от букв...
Подскажите кто помнит)
Dianochka вне форума Ответить с цитированием
Старый 30.11.2007, 21:16   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если в Паскале, то вроде бы такой функции нет. Но выбрать только цифры легко. Текст из файла копируем в строку S. Объявляем строку S1, присваиваем ей значение S1:='1234567890';. Потом сравниваем символы строки S с символами строки S1:
if S[i] in S1 then write (S[i],' '); (через пробел).
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моя первая и последняя игра. BangBangFM Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 05.12.2008 22:12
Последняя статья. R-SER Свободное общение 10 25.11.2007 20:38
Как проверть, есть ли в числе запятая? Look Общие вопросы C/C++ 5 06.11.2007 21:27