HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 04.02.2008, 22:13
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

LEE_ROY, исправь здесь:
Код:
   else if aChar =  then IsWord := True
    else IsWord := False
Получается код неправильно считает количество слов...

Вот, привожу пример на консоли, помнится именно такие задание просят сделать на консоли. Ну если че перевести куда нужно легко
Код:
program CountWord;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
 i,n,count:integer;
 t:string;
 p:boolean=false;

function Rus(mes:string):string;
  var
     i:integer;
 begin
   for i:=1 to length(mes) do
     case mes[i] of
       'А'..'п': mes[i]:=Chr(Ord(mes[i])-64);
       'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
     end;
   rus:=mes;
 end;

begin
 writeln(rus('Введите текст '));readln(t);
 n:=length(t);

 if (n>0) then begin
 count:=1;
 for i:=1 to n-1 do begin
  if ((t[i]=' ') or (t[i]='.') or (t[i]=',')) and (not p) then
   begin
    inc(count);
    p:=true;
   end
    else
   if (t[i]<>' ') and (t[i]<>'.') and (t[i]<>',') then
     p:=false;
 end;
 end
 else count:=0;
 if (t[n]=' ') or (t[n]=',') then
  count:=1;
 write(count);
 readln;
end.
Теперь подправил!
P.S. Конечно не красиво, но для учебы сойдет

Последний раз редактировалось A2GIL; 04.02.2008 в 23:09..
 
Ответить с цитированием

  #2  
Старый 04.02.2008, 22:31
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

Цитата:
for i:=1 to n-1 do begin
if ((t[i]=' ') or (t[i]='.') or (t[i]=',')) and (not p) then begin
inc(count);
p:=true;
end
else
if (t[i]<>' ') or (t[i]<>'.') or (t[i]<>',') then p:=false;
end;
A2GIL А видишь она просто считает количество пробелов или точек, или запятых - поэтому неправильно выдает! А фича с p:boolean не помогает. логически не правильно построено.
 
Ответить с цитированием

  #3  
Старый 04.02.2008, 22:41
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

Цитата:
A2GIL А видишь она просто считает количество пробелов или точек, или запятых - поэтому неправильно выдает! А фича с p:boolean не помогает. логически не правильно построено.
GLOFF, нашел где ошибка. Спасибо уже исправил Shefff, забирай.

Последний раз редактировалось A2GIL; 04.02.2008 в 23:13..
 
Ответить с цитированием

  #4  
Старый 06.02.2008, 17:23
+voron+
Познающий
Регистрация: 06.11.2007
Сообщений: 30
Провел на форуме:
169550

Репутация: 9
Отправить сообщение для +voron+ с помощью ICQ
Question

Так в паскале
Код:
Uses  Crt, Graph;
Var  i,Driver,Mode,Regim: Integer;
Begin
Driver:=VGA; 
Regim:=VGAmed;
InitGraph(Driver, Regim,'C:\Program Files\tp7\BGI');
Setbkcolor (red);
ClearDevice;
а как теперь это в дельфу в 7ую подогнать?
 
Ответить с цитированием

  #5  
Старый 06.02.2008, 18:23
rem
Новичок
Регистрация: 10.11.2006
Сообщений: 24
Провел на форуме:
59656

Репутация: 17
По умолчанию

если тебе нужна работа с графикой то юзай directx ir OpenGL
кусок кода твоего работает в консоли в дельфи он бесполезен
если хочешь на форме рисовать юзай TCanvas
 
Ответить с цитированием

  #6  
Старый 07.02.2008, 21:54
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Кто бы мог подумать, но вот понадобился Паскаль снова =(
Стандартная задача про счастливый билет:
Задается билет (шесть цифарок), нужно вывести на экран следующий после этого счастливый билет. Например: юзер ввел '123320' вывелось '123321'.
До конца отладить прогу так и не получается=(

P.S. На кривоту кода не обращайте внимания, Паскаль не юзал хз скоко времени =(

Огромное спасибо тому кто сделает, ну и конечно +++ =)

Код:
program lucky;       

uses Crt;            

Var
a,b,c,d,e,f : byte;
aw,bw,cw,dw,ew,fw,nw : string;
er1,er2,er3,er4,er5,er6 : integer;

begin

 ClrScr;            

 writeln('Enter your lucky-number');
 readln(nw);

 if Length(nw)<>6 then
  writeln('Enter valid number')
 else
  begin

                                    
                                    
                                    
  aw:=Copy(nw,1,1);                
  bw:=Copy(nw,2,1);                 
  cw:=Copy(nw,3,1);                   
  dw:=Copy(nw,4,1);                  
  ew:=Copy(nw,5,1);
  fw:=Copy(nw,6,1);

  Val(aw,a,er1);
  Val(bw,b,er2);
  Val(cw,c,er3);
  Val(dw,d,er4);
  Val(ew,e,er5);
  Val(fw,f,er6);

                                     
 if a+b+c+d+e+f = 54 then
  begin
   writeln('Congratulation! It is lucky-number!');
   writeln('Next lucky-number is 000000')
  end
 else

  if a+b+c=d+e+f then
   writeln('Congratulation! It is lucky-number!');


   for a:=a to 9 do
    for b:=b to 9 do
     for c:=c to 9 do
      for d:=d to 9 do
       for e:=e to 9 do
        for f:=f+1 to 9 do         // !!!!!!!!!!!!!!!!!!!!!!       

   if a+b+c=d+e+f then
    begin
     writeln('Next lucky-number is ',a,b,c,d,e,f);
     break;
    end




     end
end.




//123320 прекрасно
//111111 ничего кроме это лаки
//000001 ничего
 
Ответить с цитированием

  #7  
Старый 07.02.2008, 23:21
Pir4tt
Участник форума
Регистрация: 03.01.2008
Сообщений: 104
Провел на форуме:
400001

Репутация: 111
Отправить сообщение для Pir4tt с помощью ICQ
По умолчанию

У вас ошибко в алгоритме Сэр)):
Код:
//Выше просто обрезано ;)
 if a+b+c+d+e+f = 54 then
  begin
   writeln('Congratulation! It is lucky-number!');
   writeln('Next lucky-number is 000000')
  end

 else begin

  if a+b+c=d+e+f then begin
   writeln('Congratulation! It is lucky-number!');
   f:=f+1; //Увеличиваем последнюю цифру здесь а не в цикле
  end;

   for a:=a to 9 do begin
    for b:=b to 9 do begin
     for c:=c to 9 do begin
      for d:=d to 9 do begin
       for e:=e to 9 do begin
        for f:=f to 9 do begin        // !!!!!!!!!!!!!!!!!!!!!!

   if a+b+c=d+e+f then
    begin
     writeln('Next lucky-number is ',a,b,c,d,e,f);
     exit;
    end;

     end; {сбрасываем счётчики на 0 после 9)
     f:=0;
     end;
     e:=0;
     end;
     d:=0;
     end;
     c:=0;
     end;
     b:=0;
     end;

     end;
     end;
end.
 
Ответить с цитированием

  #8  
Старый 07.02.2008, 23:50
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

Цитата:
У вас ошибко в алгоритме Сэр)):
О. ребят! интересненькая задачка! Pir4tt, замечание верное. но тогда получается, что выводятся все следующие счастливые числа. Надо ведь только одно следующее! Тут есть маленькая загвоздка. Лучше воспользоваться дополнительными процедурами.
Короче убил, аж целый час. Было интересно! Проверяй
Код:
Var
a,b,c,d,e,f : byte;
aw,bw,cw,dw,ew,fw,nw : string;
er1,er2,er3,er4,er5,er6 : integer;
left,right:integer;


procedure patch(v1,v2,v3:byte;var ot:integer);
var
 buf:string;
 code:integer;
begin
 if (v1=0) and (v2=0) then buf:=inttostr(v3)
 else
 if v1=0 then buf:=inttostr(v2)+inttostr(v3)
 else
  buf:=inttostr(v1)+inttostr(v2)+inttostr(v3);
  Val(buf,ot,code);
end;

procedure dispatch(digit:integer; var s1,s2,s3:byte);
var
 buf:string;
 code:integer;
begin
 buf:=inttostr(digit);
 if digit<10 then begin
  s1:=0;s2:=0;s3:=digit;
  end
 else
  if digit<100 then begin
   s1:=0;
   Val(copy(buf,2,1),s2,code);
   Val(copy(buf,3,1),s3,code);
  end
 else begin
  Val(copy(buf,1,1),s1,code);
  Val(copy(buf,2,1),s2,code);
  Val(copy(buf,3,1),s3,code);
 end;
end;

begin
 ClrScr;    
 writeln('Enter your lucky-number');
 readln(nw);

 if Length(nw)<>6 then
  writeln('Enter valid number')
 else
  begin
  aw:=Copy(nw,1,1);                
  bw:=Copy(nw,2,1);                 
  cw:=Copy(nw,3,1);                   
  dw:=Copy(nw,4,1);
  ew:=Copy(nw,5,1);
  fw:=Copy(nw,6,1);

  Val(aw,a,er1);
  Val(bw,b,er2);
  Val(cw,c,er3);
  Val(dw,d,er4);
  Val(ew,e,er5);
  Val(fw,f,er6);

 if a+b+c+d+e+f = 54 then
  begin
   writeln('Congratulation! It is lucky-number!');
   writeln('Next lucky-number is 000000');
  end
 else

  if a+b+c=d+e+f then
   writeln('Congratulation! It is lucky-number!')
  else  begin

 patch(d,e,f,right);
 patch(a,b,c,left);
 if left=0 then begin
  left:=1;
  dispatch(left,a,b,c);
  right:=0;
  end;
  while a+b+c<>d+e+f do
    begin
      inc(right);
      dispatch(right,d,e,f);
      if (d=10) and (e=10) and (f=10) then begin
       patch(a,b,c,left);
       inc(left);
       dispatch(left,a,b,c);
      end;
    end;
     writeln('Next lucky-number is ',a,b,c,d,e,f);
    end;
     readln;
    end;
end.

Последний раз редактировалось A2GIL; 07.02.2008 в 23:54..
 
Ответить с цитированием

  #9  
Старый 07.02.2008, 23:58
Pir4tt
Участник форума
Регистрация: 03.01.2008
Сообщений: 104
Провел на форуме:
400001

Репутация: 111
Отправить сообщение для Pir4tt с помощью ICQ
По умолчанию

Цитата:
Сообщение от A2GIL  
но тогда получается, что выводятся все следующие счастливые числа.
Нет)) специально проверял, выводится одно следуещее число, обеспечивается заменой брейка на экст
Код:
   if a+b+c=d+e+f then
    begin
     writeln('Next lucky-number is ',a,b,c,d,e,f);
     exit;
    end;
A2GIL, вариант интересный, но усложнённый имхо))
//пошёл рассматривать

Последний раз редактировалось Pir4tt; 08.02.2008 в 00:02..
 
Ответить с цитированием

  #10  
Старый 08.02.2008, 00:58
A2GIL
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме:
422909

Репутация: 200
Отправить сообщение для A2GIL с помощью ICQ
По умолчанию

Цитата:
Сообщение от Pir4tt  
Нет)) специально проверял, выводится одно следуещее число, обеспечивается заменой брейка на экст
Код:
   if a+b+c=d+e+f then
    begin
     writeln('Next lucky-number is ',a,b,c,d,e,f);
     exit;
    end;
A2GIL, вариант интересный, но усложнённый имхо))
//пошёл рассматривать
Pir4tt, все таки ты прав Просто я забыл что в Паскале так можно. Значит твой вариант полегче будет Молодец.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Wi-Fi, BT] Задай вопрос - получи ответ! Alexsize Беспроводные технологии/Wi-Fi/Wardriving 2568 25.04.2026 12:58
[jQuery] - Задай вопрос, получи ответ Isis PHP 62 25.12.2009 03:25



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


Быстрый переход




ANTICHAT.XYZ