Программирование, Паскаль... помогите...

Обсуждение программ
Автор
Сообщение
|gr|k
Member

Сообщение

Дан текст. Если слово чётной длины - вставить в его середину "-".
Я написал программу, немного попотрошив преподавателя.... Но чего-то должным образом не работает:(...
Всё пересмотрел, уже вешаться собрался...

Код: Выделить всё

Program PR6; 
             USES CRT; 
             Const S1='-'; 
             Var S:string; D,i,K,n,R:integer; c:char; 
Begin clrscr; 
                 Read(S); 
                    For i:=1 to Length(S) do 
                           If (S[i]=' ') and (S[i+1]<>' ') then 
                                 Begin 
                                         K:=i; n:=0; 
                                 While 
                                 (S[n]=' ') and (S[n+1]<>' ') do 
                                        If Length(S) mod 2=0 then 
                                              Begin 
                                                      D:=Length(S); 
                                                      R:=D div 2; 
                                                      insert(S1,S,R) 
                                              End; 
                                  n:=n-1; 
                                  End 
                     Else read(S); 
                     Writeln(S); 
               C:READKEY; 
End.
Я вообще не пойму, зачем здесь нужен "K", но препод сказал "надо".
Знающие люди, скажите, у меня незначительная ошибка, или ошибка "в ДНК", Все перебивать прейдётся?
Спасибо.
IC9517
ATI&Vmod_fan
Аватара пользователя
Откуда: Баку Азербайджан

Сообщение

Что-то с суммированием длины слова не так. :-/ Не понял, что за n?
Помоему надо надиная с i спускаться к началу слова, которое обознать хоть К. Сначала К присваиваем 1, а потом по выходу из цикла суммирования длины и вставления "-", присвоить ему i+1.
Давно правда такой фигней не маялся :gigi: Просто на ум пришло :)
Maxx
Member
Откуда: Черновицкая обл., г.Кицмань

Сообщение

Замени свой главный цикл этим :

Код: Выделить всё

i := 1;
while i <= Length(S) do begin
  if S[i]=' ' then K:= 0
  else begin
    K := i;
    n := 0;
    while (S[i]<>' ') and (i <= Length(S)) do begin
      inc(i);
      inc(n);
    end;
    if n mod 2 = 0 then
      insert( S1, S, K + n div 2 );
  end;
  inc(i);
end;
П.С. Ещё : посмотри как точно работает процедура Инсерт - всмысле каким параметром ставить вставляемую строку : первым или вторым ?
П.П.С. Если будут ещё ошибки - спрашивай, помогу ... в универе писал на всю групу !
|gr|k
Member

Сообщение

Изменил, программа запускается, но также и работает: выдаёт текст, который вводил..., без вставки дефиса в слова чётной длины...
Maxx
Member
Откуда: Черновицкая обл., г.Кицмань

Сообщение

Maxx:посмотри как точно работает процедура Инсерт - всмысле каким параметром ставить вставляемую строку : первым или вторым ?
Попробуй поменять на :

Код: Выделить всё

insert( S, S1, K + n div 2 );
|gr|k
Member

Сообщение

Maxx
Да нет, с этим всё правильно было:
Вставка константы S1 в слово S, начиная с половины этого слова.
Maxx
Member
Откуда: Черновицкая обл., г.Кицмань

Сообщение

|gr|k
Дождёшся до завтра ? А то у меня Вин х64 стоит и Паскаль не запускается ...
А завтра поставлю ВМВарь запущу Вин2000 и напишу тебе эту прогу и вечерком выложу, ОК ?
|gr|k
Member

Сообщение

Maxx
Конечно!
Maxx
Member
Откуда: Черновицкая обл., г.Кицмань

Сообщение

|gr|k
Слушай, вот какая запара : я недавно поменял винты, и паскаль я наверно просто забыл переписать, а если я тебе напишу на С, она у меня точно есть ...
|gr|k
Member

Сообщение

Maxx:|gr|k
а если я тебе напишу на С, она у меня точно есть ...
"С" - это, я так понимаю, субота? Если да, то хорошо :) .
Она у тебя уже сделанная что ли есть :idea: ?
IC9517
ATI&Vmod_fan
Аватара пользователя
Откуда: Баку Азербайджан

Сообщение

Maxx: а если я тебе напишу на С, она у меня точно есть ...
Нет это язык программирования! :lol:
|gr|k
Member

Сообщение

IC9517
Тьфу ты :) , стормозил...
Нет, на Си нельзя, нас за такое конкретно ругают..., только Паскаль.
IC9517
ATI&Vmod_fan
Аватара пользователя
Откуда: Баку Азербайджан

Сообщение

|gr|k:Нет, на Си нельзя, нас за такое конкретно ругают..., только Паскаль.
У меня тож паскаля нет! Стер со злости на втором курсе :gigi:
В плане алгоритма тебе помогли, пошевели немного мозгами :)
|gr|k
Member

Сообщение

IC9517: В плане алгоритма тебе помогли, пошевели немного мозгами :)
Вот только на это давить не надо, ладно?
Maxx
Member
Откуда: Черновицкая обл., г.Кицмань

Сообщение

|gr|k
Привет, слушай если у тебя есть старенький Турбо Паскаль, и весит не много ( 1.5-2Мб ) тогда сожми чем нибуть и кинь мне его на мыло, тогда напишу ...
Адрес отправлю тебе в ЛС.
|gr|k
Member

Сообщение

Maxx
28,5 МБ, у меня DialUp :( ...
Maxx
Member
Откуда: Черновицкая обл., г.Кицмань

Сообщение

|gr|k:28,5 МБ
Что-то больно большой, я его резал до 1,5 Мб, когдато в своё время, и он мне помещался на дискету ...
|gr|k:у меня DialUp
и у меня ...
]morgan[
Junior
Откуда: Киев

Сообщение

|gr|k
примерно так:

Код: Выделить всё

Program PR6;
             USES CRT;
             Const S1='-';
             Var S,Z,Sl:string; D,i,K,n,R:integer; c:char;
Begin clrscr;
                 Read(S);
                 Writeln('----------------------------');
                 K:=1;
                 For i:=1 to Length(S) do
                 begin
                      if (i= Length(S)) then
                      begin
                          Sl:=Copy(S,K,i+1-K);
                          D:=Length(Sl);
                          if D mod 2 = 0 then
                          Begin
                             D:=D div 2;
                             insert(S1,Sl,D+1);
                             Z:=Concat(Z,Sl);
                             Z:=Concat(Z,' ');
                          end
                          Else Z:=Concat(z,Sl+' ');
                      End;
                      if ((S[i]=' ') and (S[i+1]<>' ')) then
                      begin
                           Sl:=Copy(S,K,i-K);
                           K:=i+1;
                           D:=Length(Sl);
                           if D mod 2 = 0 then
                           Begin
                              D:=D div 2;
                              insert(S1,Sl,D+1);
                              Z:=Concat(Z,Sl);
                              Z:=Concat(Z,' ');
                           end
                           Else Z:=Concat(z,Sl+' ');
                      end;
                 end;
                 Writeln(Z); 
                 Writeln('----------------------------');

               C:=READKEY;
End.
убери лишние переменные ;)

Добавлено спустя 1 минуту 59 секунд:
упс, глянул на дату создания топика... наверно поздно я :rotate:
zlionx
Junior
Откуда: jkhkj

Сообщение

помогите решить задачу плиз

Розробити програму табулювання функції, вивести їх значення у вигляді таблиці. Розробити три варіанти обчислення з використанням трьох видів циклів, для контролю підрахувати суму значень функцій, результати вивести окремо.
y = (ln(x^2 + 1))^2 + x; інтервал : відрізок [2,6], крок 0.5.
:rolleyes:
Sparrow
Member
Аватара пользователя
Откуда: Киев

Сообщение

чуть не помер когда увидел эти адские буквы опять, это ж где такому зверству учат кроме лицея Наукова Змина?
Ответить