Важная информация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Переставить слова в которых нет цифр в конец строки.

  1. #1 Переставить слова в которых нет цифр в конец строки. 
    Новичок
    Регистрация
    02.12.2011
    Сообщений
    15
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Помогите составить программу в которой необходимо переставить слова в которых нет цифр в конец строки.
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Вот. Возможно, не очень оптимально, зато алгоритм нагляден и надежен, и никакого шаманства.
    Код pascal:
    Var
        Tex, Res, ResStr: String;
        I: Word;
     
    Function GetWord(Var AFromStr: String; Var I: Word): String;
    Var
        OldI: Word;
    Begin
        While (AFromStr[I] = ' ') And (I < Length(AFromStr)) Do Inc(I);
        OldI:= I;
        While (AFromStr[I] <> ' ') And (I <= Length(AFromStr)) Do Inc(I);
        GetWord:= Copy(AFromStr, OldI, I - OldI);
    End;
     
    Function IsDigitsExist(Var AFromStr: String): Boolean;
    Var
        II: Word;
    Begin
        For II:= 1 To Length(AFromStr) Do If AFromStr[II] In ['0'..'9'] Then Begin
            IsDigitsExist:= True;
            Exit;
        End;
        IsDigitsExist:= False;
    End;
     
    Begin
        ReadLn(Tex);
        I:= 1; ResStr:= '';
        Repeat
            Res:= GetWord(Tex, I);
            If IsDigitsExist(Res) Then ResStr:= ResStr + Res + ' ';
        Until Res = '';
        I:= 1;
        Repeat
            Res:= GetWord(Tex, I);
            If Not IsDigitsExist(Res) Then ResStr:= ResStr + Res + ' ';
        Until Res = '';
        WriteLn(ResStr);
    End.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. #3  
    Новичок
    Регистрация
    02.12.2011
    Сообщений
    15
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Большое спасибо, чуток подкорректировал и работает, НО она переносит слова с цифрами в начало строки, а надо в конец)
    А можно переделать по легче? (ну без функций и т.д.) 1-й курс все же, не поверят, мы функции не проходили.
    Последний раз редактировалось Gumm1Bear; 02.12.2011 в 15:21.
    Ответить с цитированием  
     

  4. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Могу и без функций переделать, хотя род задачи как раз такой, что ее удобно решать именно через функции
    А чтобы слова с цифрами шли в конец, нужно в первой строке If IsDigitsExist(Res) Then ResStr:= ResStr + Res + ' '; после If поставить Not, а в строке If Not IsDigitsExist(Res) Then ResStr:= ResStr + Res + ' '; просто убрать not =)
    А что именно вы подкорректировали? Программку то я проверил - работает хорошо, не считая того факта, что переносила слова с цифрами в начало, а не в конец.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  5. #5  
    Новичок
    Регистрация
    02.12.2011
    Сообщений
    15
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    II: Word; заменил на II: integer;
    оно целым должно быть)
    Ответить с цитированием  
     

  6. #6  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Цитата Сообщение от Gumm1Bear Посмотреть сообщение
    II: Word; заменил на II: integer;
    оно целым должно быть)
    В данном случае между типами Word и Integer нет совершенно никакой разницы
    Для справки: Integer - целочисленный знаковый тип, переменная которого занимает 2 байта, и способна принимать значения в диапазоне от -32768 до 32767.
    Word - целочисленные беззнаковый тип, переменная которого также занимает 2 байта, и способна принимать значения от 0 до 65535.
    Можно дать переменной I тип как Integer, так и Word, и на работе программы это никак не отразится.
    Программку скоро подсуечу.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  7. #7  
    Новичок
    Регистрация
    02.12.2011
    Сообщений
    15
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    ок, жду программку
    ну что там? почти время закончилось (
    Последний раз редактировалось Gumm1Bear; 02.12.2011 в 16:30.
    Ответить с цитированием  
     

  8. #8  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Вот вам целых два варианта, оба без функций. Первая намного короче, но у нее есть один нюанс: она переносит все слова с числами вправо, но сами слова в результирующей строке идут не в том порядке, в котором они шли во входной строке.
    Код pascal:
    Var
        Tex, Res, ResStr: String;
        I, OldI: Word;
        IsDigitExist: Boolean;
     
    Begin
        ReadLn(Tex);
        I:= 1; ResStr:= '';
        Repeat
            While (Tex[I] = ' ') And (I < Length(Tex)) Do Inc(I);
            OldI:= I;
            While (Tex[I] <> ' ') And (I <= Length(Tex)) Do Begin
                If Tex[I] In ['0'..'9'] Then IsDigitExist:= True;
                Inc(I);
            End;
            Res:= Copy(Tex, OldI, I - OldI);
            If IsDigitExist Then
                ResStr:= ResStr + Res + ' '
            Else
                ResStr:= Res + ' ' + ResStr;
            IsDigitExist:= False;
        Until Res = '';
     
        WriteLn(ResStr);
    End.

    А эта более длинная, но зато порядок слов не меняет.
    Код pascal:
    Var
        Tex, Res, ResStr: String;
        I, OldI: Word;
        IsDigitExist: Boolean;
     
    Begin
        ReadLn(Tex);
        I:= 1; ResStr:= '';
        Repeat
            While (Tex[I] = ' ') And (I < Length(Tex)) Do Inc(I);
            OldI:= I;
            While (Tex[I] <> ' ') And (I <= Length(Tex)) Do Begin
                If Tex[I] In ['0'..'9'] Then IsDigitExist:= True;
                Inc(I);
            End;
            Res:= Copy(Tex, OldI, I - OldI);
            If Not IsDigitExist Then ResStr:= ResStr + Res + ' ';
            IsDigitExist:= False;
        Until Res = '';
     
        I:= 1;
        Repeat
            While (Tex[I] = ' ') And (I < Length(Tex)) Do Inc(I);
            OldI:= I;
            While (Tex[I] <> ' ') And (I <= Length(Tex)) Do Begin
                If Tex[I] In ['0'..'9'] Then IsDigitExist:= True;
                Inc(I);
            End;
            Res:= Copy(Tex, OldI, I - OldI);
            If IsDigitExist Then ResStr:= ResStr + Res + ' ';
            IsDigitExist:= False;
        Until Res = '';
     
        WriteLn(ResStr);
    End.

    Выбирайте то, что велит вам ваше сердце, дос zxD)))
    Дружба-магия-радость!
    Ответить с цитированием  
     

  9. #9  
    Новичок
    Регистрация
    02.12.2011
    Сообщений
    15
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    (взял первую)
    Большое спасибо, программка понравилась как мне так и учителю)
    Ответить с цитированием  
     

  10. #10  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Рад помочь, по мере своих сил. Обращайтесь еще.
    Вот только, уже не в первый раз такое встречаю: Учителя, они в школе, а в колледжах и вузах, если не ошибаюсь, преподы =)
    Дружба-магия-радость!
    Ответить с цитированием  
     

Страница 1 из 2 12 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 3
    Последнее сообщение: 23.12.2011, 00:01
  2. строки в с++
    от stupidstudent в разделе C/C++
    Ответов: 2
    Последнее сообщение: 17.12.2011, 16:45
  3. Ответов: 1
    Последнее сообщение: 03.06.2011, 04:15
  4. Ответов: 2
    Последнее сообщение: 19.05.2011, 22:05
  5. Ответов: 3
    Последнее сообщение: 22.04.2011, 00:15
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •