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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2014, 11:35   #1
snord123
 
Регистрация: 06.05.2014
Сообщений: 6
По умолчанию Удаление и поиск в одномерном массиве. Криво работает программа помогите пожалуйста.делфи

Здравствуйте уважаемые форумчане!
Не могу реализовать поиск элемента в массиве по индексу.
И удаление работает криво - после удаления одного элемента в конце появляется новое число.
Кто может или знает как реализовать вставку прошу помощи.




Код:
uses
  SysUtils,Windows,
  inout;
  const
  R = 10;
  E = R - 1;
label
   loop,
   kup,
   hut,
   rot,
   corp;
var
 mas:array [1..10] of integer;
 k,n,m,u,i,j,y,v,b,h,p,a,t,g,s,num:integer;
begin
 corp:
  randomize;
  for m:= 1 to 10 do
  mas[m]:=random(100);
      begin
              i:=m+1;
              mas[m]:= mas[i];
      end;
          for m:= 1 to 10 do
          write(mas[m]:3);
          writeln;
   writeln(ruswd('<1> Удалить <2> Поиск <3> Вставить <4> Выход'));
   readln(u);
   if u=1 then goto loop;
   if u=2 then goto kup;
   if u=3 then goto hut;
   if u=4 then goto rot;
 loop:
    writeln;
    write(ruswd('Введите индекс элемента для удаления- '));
    readln(n);
    for m:= n to 10 do
      begin
      i:=m+1;
      mas[m]:= mas[i];
      end;
    for m:= 1 to 10 do
    write(mas[m]:3);
    writeln;
    writeln(ruswd('<1> Повторить <2> В главное меню <3> Выход'));
    readln(h);
    if h=1 then goto loop;
    if h=2 then goto corp;
    if h=3 then goto rot;

 kup:
  begin
  writeln(ruswd('Введите числдо ,которое будем  искать в массиве'));
  readln(p);
  for i := 1 to n do
    begin
      readln(mas[j]);
      if mas[j] = p then begin
      y := y + 1;
      mas[y] := j;
        if y = 0 then writeln(ruswd('В массиве нет такого числа!'))  else
  if y = 1 then writeln(ruswd('Число найдено, его порядковый номер = '), mas[y]) else
  begin
    write(ruswd('Число найдено, его порядковые номера = '));
    for j := 1 to y do
      write(mas[j], ' ');
      writeln(ruswd('<1> Повторить <2> В главное меню <3> Выход '));
      readln(h);
      if h=1 then goto kup;
      if h=2 then goto corp;
      if h=3 then goto rot;
  end;
  readln;
   end;
   end;
   end;
 hut:
 begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
    Writeln(ruswd('Исходный массив:'));
    for t := 1 to E do begin
      mas[m] := m * 2;
      if m > 1 then Write(', ');
      Write(mas[m]);
    end;
    Writeln;

    Writeln(ruswd('Задайте целое число:'));
    Readln(Num);
    //Поиск позиции, в которую должно быть вставлено число.
    m := 1;
    while (Num > mas[m]) and (m <= E) do m := m + 1;
    //Сдвиг элементов массива, начиная от найденной позиции
    //t до конца массива.
    for g := E downto t do mas[g + 1] := mas[m];
    Writeln (ruswd('Вставка числа.'));
    mas[m] := Num;

    Writeln(ruswd('Число вставлено в позицию: '), (m));
    Writeln(ruswd('Массив после вставки числа:'));
    for m := 1 to R do begin
      if m > 1 then Write(', ');
      Write(mas[m]);
    end;
    Writeln;

    Writeln(ruswd('<1> Повторить <2> В главное меню <3> Выход'));
    Readln(S);
    if s=1 then goto hut;
    if s=2 then goto corp;
    if s=3 then goto rot;
end;
rot:
end.

Ребят ну помогите прошу. Курсовой проект. Старая преподовательница (знающая делфи) ушла на пенсию около месяца назад. Друзья помогли чем смогли. Новый препод не помогает ничем.

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

Модератор.

Последний раз редактировалось snord123; 11.05.2014 в 12:52.
snord123 вне форума Ответить с цитированием
Старый 11.05.2014, 12:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
'<1> Óäàëèòü <2> Ïîèñê <3> Âñòàâèòü'
snord123, перед копированием текста на форум включайте русскую раскладку клавиатуры, тогда не будет этих косяков..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.05.2014, 12:20   #3
snord123
 
Регистрация: 06.05.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
snord123, перед копированием текста на форум включайте русскую раскладку клавиатуры, тогда не будет этих косяков..
эм..ок, простите я новенький на форуме.
snord123 вне форума Ответить с цитированием
Старый 11.05.2014, 12:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от snord123 Посмотреть сообщение
эм..ок, простите я новенький на форуме.
Ничего страшного, главное, теперь Вы всё получилось, русский текст виден нормально.

для того, чтобы удалять элементы из одномерного массива, Вам нужно или изменять количество элементов в массиве (т.е. понимать, что когда из массива, в котором 10 чисел, удаляют один элемент, то в массиве остаётся 9 элементов).
Либо, если длина массива не меняется и ВСЕГДА равна 10, то дописывать нули в конец массива.

Вот, например,
у Вас есть массив из 10 элементов. в нём такие значения:
21 22 23 24 25 26 27 28 29 30

удалите из него третий элемент.
Выведите, какой массив должен получится после удаления.


А вы зря нарушаете правила форума!
Зачем Вы ещё одну тему создали?! Кросспостинг (создание дублирующих тем) на форуме СТРОГО запрещено!

Последний раз редактировалось Stilet; 12.05.2014 в 08:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.05.2014, 12:58   #5
snord123
 
Регистрация: 06.05.2014
Сообщений: 6
По умолчанию

Удаление должно быть по индексу, и элементы в нем рандомные а не по возрастанию и прочее. Незнаю как это собрать всё по кусочкам решил обратиться сюда.
Прошу прощения за нарушение правил но всё выглядило безнадёжно. Никто не отвечал.
Я вот подумал что если создам новую тему она ведь появляется в начале списка помощи студентам, то будем шанс реализовать программу, ведь сам то я дуб в сфере программирования =(
snord123 вне форума Ответить с цитированием
Старый 11.05.2014, 23:44   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Удаление должно быть по индексу, и элементы в нем рандомные а не по возрастанию и прочее.
ОМГ.

Ок.
у Вас есть массив. в нём десять значений:
17 99 21 65 14 77 81 34 22 11

удалите элемент с индексом = 3 (третий элемент).

После удаления напишите, какой массив получится?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 16:27   #7
snord123
 
Регистрация: 06.05.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

После удаления напишите, какой массив получится?
17 99 65 14 77 81 34 22 11 3

вот такой
в конце "3" добавляется
то число которое вписываю в индекс появляется в конце массива.
и кажется я перемешал код делфи с кодом С++
.....
snord123 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск,удаление и вставка элементов в одномерном массиве.Delphi.Программа для курсовой работы. Help please. snord123 Помощь студентам 2 09.05.2014 18:18
поиск наибольших чисел в одномерном массиве Alex_Dep Помощь студентам 3 18.11.2013 12:33
программа работает криво Юрий_91 Общие вопросы C/C++ 1 25.04.2010 08:40
Помогите ПЛИЗ доделать задачу "поиск мах эл. в одномерном массиве" JNN Общие вопросы C/C++ 3 04.06.2009 09:23
Поиск в одномерном массиве Joxter Помощь студентам 6 13.12.2008 14:19