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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 22:10   #1
logo23
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию Проблема с массивом

Здравствуйте.
Вот один из циклов моей программы:


Код:
 var y,f,k:integer; 
      q:string;
      mas1:array[1..10] of string;
 repeat// ЦИКЛ
y:=f mod 10;
k:=y+1; //Эти две строчки для 
q:=mas1[k];//                         вывода нужно эл-та из массива по его номеру
writeln(utf8toconsole('Разложение числа: '), y); 
writeln(utf8toconsole('Элементы массива(ответ)='),q);
f:=f div 10;
  until f=0;
как видно он раскладывает число f на цифры

Моя проблема заключается в том, что я не могу записать ВСЕ! элементы q в новый массив(у меня получается что в новый массив попадает всегда эл-т q из последнего цикла).

Подскажите пожалуйста, как это можно сделать?
Заранее благодарен.

Последний раз редактировалось Stilet; 01.05.2012 в 22:29.
logo23 вне форума Ответить с цитированием
Старый 01.05.2012, 22:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в новый массив
Где? Покажи мне тут новый массив.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 22:42   #3
logo23
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Где? Покажи мне тут новый массив.
В новый массив надо было записать все q символы.
Я уже решил эту проблему след. образом:
Код:
for i:=1 to r do
  begin
   y:=f mod 10;
   k:=y+1;
   q:=mas1[k];
   writeln(utf8toconsole('Разложение числа: '), y);
   writeln(utf8toconsole('Элементы массива(ответ)='),q);
    f:=f div 10;
    mas2[i]:=q;
  end;
т.е. заменой цикла, где r у меня это кол-во цифр в раскладываемом числе. вообщем работает!


Но есть еще вопрос: mas2-у меня массив с ответами, мне нужно чтобы они выводились задом наперед, подскажите как поменять эл-ты массива задом наперед?



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.05.2012 в 22:51.
logo23 вне форума Ответить с цитированием
Старый 01.05.2012, 23:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне нужно чтобы они выводились задом наперед
Код:
for i:=10 downto 1 do write(mas2[i]);
Это после цикла поставь
А writeln(utf8toconsole('Элементы массива(ответ)='),q); убери из цикла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 23:24   #5
logo23
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
for i:=10 downto 1 do write(mas2[i]);
Это после цикла поставь
А writeln(utf8toconsole('Элементы массива(ответ)='),q); убери из цикла.
Спасибо за помощь!

и извиняюсь за не корректное оформление.
logo23 вне форума Ответить с цитированием
Старый 02.05.2012, 00:13   #6
logo23
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

наверное(я надеюсь) последняя проблема с моей прогой, буду безумнг благодарен за помощь!

И так, имеем:
Код:
mas1:array[1..10] of string;
тут хранятся введенные элементы уже расположенные в алфавитном порядке;
Код:
mas2:array[1..10] of string;
тут хранятся элементы ответа, тока задом наперед, я прописываю
Код:
for i:=b downto 1 do
write(mas2[i]);
у меня выводится массив в правильном порядке.
Количество элементов mas1 может быть не равно количеству эл-ов mas2.

НО!
Возможен такой случай, когда программа должна будет добавлять в mas2 ПЕРВЫЙ ЭЛЕМЕНТ из mas1(т.е. mas1[1] как я понимаю) и в ответе он должен выводиться вначале(с левой стороны)и возможно n раз(n-известно).

НАПРИМЕР:
mas1=а,б,г,з,п;
mas2=г,г,з;
n=2;
ответ=а,а,з,г,г;
Как сделать, чтобы первый элемент из mas1 добавлялся в ответ?
Я выход из ситуации вижу в добавлении первого эл-та mas1 в конец массива mas2 заданное кол-во раз, но как это реализовать, увы не знаю.
Если что-то не понятно объяснил, извиняюсь, спросите дополню.

Заранее спасибо!

Последний раз редактировалось logo23; 02.05.2012 в 00:24.
logo23 вне форума Ответить с цитированием
Старый 02.05.2012, 09:23   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

logo23, извините, может я, конечно, вмешиваюсь в выстроенную Вами чёткую концепцию развития проекта, но всё таки хотелось бы уточнить:
а расскажите поподробнее как изначально стоит задача: что имеется, что Вы хотите получить в итоге?


p.s. возможно то, что Вы делаете можно сделать проще... или вообще по другому...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2012, 18:42   #8
logo23
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
logo23, извините, может я, конечно, вмешиваюсь в выстроенную Вами чёткую концепцию развития проекта, но всё таки хотелось бы уточнить:
а расскажите поподробнее как изначально стоит задача: что имеется, что Вы хотите получить в итоге?


p.s. возможно то, что Вы делаете можно сделать проще... или вообще по другому...
Конечно.
Мне в университете задали написать исходный код программы которая решает задачу В4 из ЕГЭ по информатике, преподаватель сказал посмотреть как у Полякова и сделать такую же

Собственно вот что у меня пока получилось:
Код:
program kurasach9;

{$mode objfpc}{$H+}

uses
  CRT, FileUtil,sysutils;

var
a,b,g,i,n,m,j,k,w,r,y,f,e,l:integer;
z,x,q:string;
c:real;
mas1:array[1..10] of string;
mas2:array[1..10] of string;
function ItoS(val:integer):string;
var
  _r:string;
begin
  Str(val,_r);
  ItoS:=_r;
end;

function ConvertToCS(val:integer;CS:integer):string;
var
  _r,_r1:string;
  _m,i:integer;
begin
  _r:='';
  if CS>16 then exit;
  repeat
   _m:=val mod CS;
   val:=val div CS;
   if _m<10 then
    _r:=_r+ItoS(_m)
            else
    _r:=_r+chr(ord('A')+_m-10);
  until val=0;

  _r1:='';
  for i:=length(_r) downto 1 do
   _r1:=_r1+_r[i];
  ConvertToCS:=_r1;
end;
begin
  randomize;
  writeln(utf8toconsole('Введите кол-во символов в словах'));
  readln(a);
  writeln(utf8toconsole('Введите мощность алфавита'));
  readln(b);
  c:=exp(a*ln(b));
  g:=round(c);
  n:=random(g);
  writeln(utf8toconsole('Случайное число '), n);
  writeln(utf8toconsole('Всего сочениий будет: '),c:2:0);
  m:=n-1;
  writeln(utf8toconsole('Это число: '), m);
  writeln(utf8toconsole('надо перевести в систему с основанием: '), b);
  writeln(utf8toconsole('Получится: '), converttocs(m,b));
  writeln(utf8toconsole('Введите '), b);
  writeln(utf8toconsole('буквы поочередно'));
  for i:=1 to b do
  readln(mas1[i]);
  {writeln('vot chto vveli');
  for i:=1 to b do
  writeln(mas1[i]);}

  for i:=1 to b-1 do
   for j:=i+1 to b do
if mas1[i]>mas1[j] then
 begin
  x:=mas1[i];
  mas1[i]:=mas1[j];
  mas1[j]:=x;
 end;
  writeln(utf8toconsole('Массив по возрастанию:'));
for i:=1 to b do
writeln(mas1[i]);

z:=converttocs(m,b);
f:=strtoint(z);

w:=f;
r:=1;
while w div 10 >=1 do
 begin
  r:=r+1;
  w:=w div 10;
 end;
writeln(utf8toconsole('Число разрядов '),r);
 for i:=1 to r do
  begin
   y:=f mod 10;
   k:=y+1;
   q:=mas1[k];
   writeln(utf8toconsole('Разложение числа: '), y);
   writeln(utf8toconsole('Элемент массива(ответ)='),q);
   f:=f div 10;
   mas2[i]:=q;
  end;
  writeln(utf8toconsole('ОТВЕТ: '));
  for i:=b downto 1 do
  write(mas2[i]);
  writeln;
  writeln(utf8toConsole('Нажмите любую клавишу'));
  readkey;
end.
Ну а вопрос я изложил в своем прошлом посте.
Буду благодарен за помощь.
logo23 вне форума Ответить с цитированием
Старый 03.05.2012, 21:42   #9
logo23
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Вообщем я сам решил проблему вот таким образом:
Код:
writeln(utf8toconsole('Ответ2:'));
    for i:=1 to l do
     begin
    mas1[i]:=mas1[1];
    write(mas1[i]);
     end;
    for i:=t downto 1 do
  write(mas2[i]);
Спасибо всем кто откликнулся!
logo23 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с массивом и бд hunter03 Помощь студентам 4 16.10.2011 17:57
Проблема с массивом Moderntoss Общие вопросы C/C++ 4 21.04.2011 21:52
Проблема с массивом @Ivan Общие вопросы C/C++ 2 11.10.2010 11:46
Проблема с массивом !!! drylozav Помощь студентам 49 10.10.2010 13:29
Проблема с массивом Акашаев Нурлан PHP 2 23.11.2008 14:45