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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2014, 17:05   #1
AnnTIKH
 
Регистрация: 10.05.2014
Сообщений: 6
По умолчанию Паскаль - помогите найти ошибки в моем коде

Задание:Подсчитать число одинаковых элементов на соответствующих позициях в двух строках, используя для этого указатели на строки.
код:
Код Pascal

Код:
program ukaz;
var 
  st1,st2:^string;k,i:integer;
begin
 writeln ('svobodno: ',memavail);
  write ('vvod 1 stroki: ');
  new(st1^);
  readln (st1^);
  write ('vvod 2 stroki: ');
  new(st2^);
  readln (st2^);
 
   st1:=@st1^[0];st2:=@st2^[0];
   k:=0;
for i:= 1 to length(st1^) do
 begin
  if st1^=st2^  then k:=k+1;
    st1:=pointer(integer(st1)+1);
    st2:=pointer(integer(st2)+1);
 end;
     writeln ('Cislo odinakovix elementov: ',k);
     readln;
end.

Последний раз редактировалось Stilet; 10.05.2014 в 17:15.
AnnTIKH вне форума Ответить с цитированием
Старый 10.05.2014, 17:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Может быть нужно так?:
Код:
var a,s:^Char;q,w:string;c,i:integer;
begin
 q:='12345'; a:=@q[1];
 w:='12345'; s:=@w[1];
 i:=1; c:=0;

 while (i<=Length(a))and(i<=Length(w)) do begin
   if (a^=s^) then inc(c);
   inc(i);inc(a);inc(s);
 end;
 write(c);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.05.2014, 17:32   #3
AnnTIKH
 
Регистрация: 10.05.2014
Сообщений: 6
По умолчанию

Сначала именно так я и сделала, но мне сказали не усложнять код, и написать его через указатели сразу(то есть как в разделе var у меня написано)
AnnTIKH вне форума Ответить с цитированием
Старый 10.05.2014, 17:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Твой преподаватель двоечник, купивший диплом. Можешь так ему и передать.
По крайней мере учить ему в западло.

пиши так: new(st1); и new(st2);
I'm learning to live...

Последний раз редактировалось Stilet; 10.05.2014 в 17:39.
Stilet вне форума Ответить с цитированием
Старый 10.05.2014, 17:55   #5
AnnTIKH
 
Регистрация: 10.05.2014
Сообщений: 6
По умолчанию

ой, в коде у меня так и прописано: new(st1); new(st2); / это я здесь неправильно написала
AnnTIKH вне форума Ответить с цитированием
Старый 10.05.2014, 20:02   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тогда не понимаю что тебе не понравилось.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2014, 11:15   #7
AnnTIKH
 
Регистрация: 10.05.2014
Сообщений: 6
По умолчанию

Число одинаковых элементов считается неправильно
AnnTIKH вне форума Ответить с цитированием
Старый 11.05.2014, 16:55   #8
AnnTIKH
 
Регистрация: 10.05.2014
Сообщений: 6
По умолчанию

Написала я программку, которая более-менее соответствует реальности. теперь другая загвоздка: элементы в строках просматриваются через один. не понимаю почему так
Код:
program ukaz;
uses crt;
var
  a,s:^string; k,i,m:integer;
begin
 clrscr;
 writeln ('vvod 1 stroki'); new(a);
 readln (a^);
 writeln ('vvod 2 stroki'); new(s);
 readln (s^);
   k:=0;
  if length(a^)>length(s^) then m:=length(s^)
  else m:= length(a^);
for i:=1 to m do
 begin
   writeln('s^:',s^[i]); writeln('a^:',a^[i]);
 if a^[i]=s^[i]
 then k:=k+1;
  a:=@a^[i];
  s:=@s^[i];

 end;
 writeln ('chiclo odinakovix elementov= ',k);

 getmem(a,length(a^));
 freemem(a,length(a^));
 getmem(s,length(s^));
 freemem(s,length(s^));
 writeln('svobodno ',memavail,' bait');
 readln;


end.

Последний раз редактировалось Stilet; 11.05.2014 в 17:11.
AnnTIKH вне форума Ответить с цитированием
Старый 11.05.2014, 17:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Боже, какой же фигне вас учат...
Код:
program ukaz;
uses crt;
var
  a,s:^string; k,i,m:integer;
begin
 clrscr;
 writeln ('vvod 1 stroki'); new(a); readln (a^);
 writeln ('vvod 2 stroki'); new(s); readln (s^);
 if length(a^)>length(s^) then m:=length(s^)
  else m:= length(a^);
for i:=1 to m do   if a^[i]=s^[i] then k:=k+1;

 writeln ('chiclo odinakovix elementov= ',k);
 dispose(a);dispose(s);
 writeln('svobodno ',memavail,' bait');
 readln;


end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2014, 17:33   #10
AnnTIKH
 
Регистрация: 10.05.2014
Сообщений: 6
По умолчанию

Спасибо!!! Вы гений!
AnnTIKH вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста найти ошибки в коде. Slo Помощь студентам 1 12.12.2013 21:58
кто может исправить ошибку в моем коде написанном на С++ Андрей777 Общие вопросы C/C++ 7 10.04.2010 22:49
Помогите решить. Или исправте ошибки в моем варианте. ZzMaKSzZ Общие вопросы C/C++ 2 23.12.2009 20:08
Уважаемые программисты.Скажите пожалуйста все ли правильно в моем коде. Paul_AG Общие вопросы C/C++ 6 27.03.2009 21:30
Где ошибка в моем коде? artemavd БД в Delphi 12 22.09.2008 14:28