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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2020, 00:39   #1
Сyberbitch
Пользователь
 
Регистрация: 09.12.2019
Сообщений: 12
По умолчанию удаление элемента из списка

Вечер добрый. Была поставлена задача переделать данный код под условия
Обязательно должно быть реализовано выполнение следующих функций:
• добавления элемента в конец, начало, середину (до и после введенного номера). Добавление данных происходит с клавиатуры;
• удаления элемента из начала, середины, конца;
• очистка списка;
У меня код умеет только создавать элементы в списке,и искать определённые вещи в них.
помогите переделать код под вышеперечисленные условия, или помогите советом.
вот сам код
Код:
const
  n = 2;
 
type
  abonent = record
    fam: string[128];
    rajon: string[128];
    adrs: string[128];
    tel: string[128];
    datzakl: string[128];
    nomdogora: string[128];
    oplata: string[128];
    lastdat: string[128];
  end;
 
var
  a: array [1..n] of abonent;
  i: integer;
  s: string[128];
  
begin
  for i := 1 to n do
    with a[i] do
    begin
      write('Введите фамилию абонента: ');
      readln(fam);
      write('Введите район: ');
      readln(rajon);
      write('Введите адрес: ');
      readln(adrs);
      write('Введите телефонный номер: ');
      readln(tel);
      write('Введите дату заключения договора: ');
      readln(datzakl);
      write('Введите номер договора: ');
      readln(nomdogora);
      write('Введите оплату установки: ');
      readln(oplata);
      write('Введите дату последнего платежа: ');
      readln(lastdat);
    end;
  write('Введите район абонента: ');
  readln(s);
  for i := 1 to n do
    if a[i].rajon = s then
      writeln('Абонент найден:', ' фамилия абонента - ', a[i].fam, ' район абонента - ', a[i].rajon);
end.
Буду очень благодарен за помощь.
Сyberbitch вне форума Ответить с цитированием
Старый 29.02.2020, 19:36   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Очень рекомендую почитать Т.А. Павловскую, Программирование на ЯВУ. Паскаль.
Книга была в списке литературы. Там есть хороший и достаточно полный пример по работе со списками.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.03.2020, 15:02   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
uses crt;

type
  abonent = record
    fam: string[128];
    rajon: string[128];
    adrs: string[128];
    tel: string[128];
    datzakl: string[128];
    nomdogora: string[128];
    oplata: string[128];
    lastdat: string[128];
  end;

procedure preview(var rec: abonent);
begin
  with rec do
  begin
    writeln('Фамилия абонента: ', fam);      
    writeln('Район: ', rajon);    
    writeln('Адрес: ', adrs);      
    writeln('Телефонный номер: ', tel);     
    writeln('Дата заключения договора: ', datzakl);     
    writeln('Номер договора: ', nomdogora);  
    writeln('Оплата установки: ', oplata);    
    writeln('Дата последнего платежа: ', lastdat);   
    writeln();
  end;
end;

function add_rec(var rec: abonent): abonent;
begin
  with (rec) do
  begin
    write('Введите фамилию абонента: ');
    readln(fam);
    write('Введите район: ');
    readln(rajon);
    write('Введите адрес: ');
    readln(adrs);
    write('Введите телефонный номер: ');
    readln(tel);
    write('Введите дату заключения договора: ');
    readln(datzakl);
    write('Введите номер договора: ');
    readln(nomdogora);
    write('Введите оплату установки: ');
    readln(oplata);
    write('Введите дату последнего платежа: ');
    readln(lastdat); 
  end;
  
  Result := rec;
  
end;


var
  a, temp: array of abonent;
  i, count_rec, posit, k: integer;
  menu: integer;
  exits: boolean;
  obr:string;

begin
   
  exits := false;
    
  repeat
    clrscr;
    writeln('1. Заполнить массив данными');  
    writeln('2. Просмотреть массив с данными');  
    writeln('3. Добавить данные в массив на указанную позицию');  
    writeln('4. Удалить данные из массива по индексу');  
    writeln('5. Поиск по фамилии');  
    writeln('6. Очистить массив');  
    writeln('0. Выйти');
    write('Выберите операцию...');
    readln(menu);
    clrscr;
    
    if (menu > 1) and (a = nil) and (menu <> 6) then
    begin
      writeln('Массив не заполнен либо был очищен, пожалуйста, заполните массив используя 1 пункт меню...');
      exit;
    end;
    
    
    case menu of
      1:
        begin
          
          write('Сколько записей будет в массиве? ');
          readln(count_rec);
          
          if count_rec <= 0 then count_rec := 1;
          
          setlength(a, count_rec);
          
          for i := 0 to length(a) - 1 do
          begin
            writeln('Запись ', i + 1);
            a[i] := add_rec(a[i]);
            writeln;
          end;
          
          writeln('Добавлено в массив: ', i + 1, ' - записей!');        
        
         end;
      
      2:         
        
        
        begin
          if (length(a) <= 0) then
          begin
            writeln('Массив пуст!');
            exit;
          end;
          for i := 0 to length(a) - 1 do 
          begin
            writeln('Запись номер ', i + 1);
            preview(a[i]);
          end;
          writeln('Показаны все ', i + 1, ' - записей!');
        end;
      
      
      3: 
        begin
        
          writeln('Сколько записей добавить в существующий массив? ');
          readln(count_rec);
          
          writeln('В какую позицию добавить новый элемент? (Если больше размера массива, то меняется пишется начиная с последней позиции)');
          readln(posit);
          
          if posit <= 0 then posit := 1;
          if posit >= length(a) then posit := length(a);
          
          SetLength(temp, length(a) + count_rec);
          
          i := 0;
          
          while(i <= posit - 1) do
          begin
            temp[i] := a[i];
            inc(i);
          end;
          
          k := i;
          
          while (count_rec <> 0) do
          begin
            writeln('Запись ', i + 1);
            temp[i] := add_rec(temp[i]);
            writeln;
            inc(i);
            dec(count_rec);
          end;
          
          while (k < length(a)) do
          begin
            temp[i] := a[k];
            inc(i);
            inc(k);
          end;
          
          if a <> nil then a := nil;
          setlength(a, length(temp));
          
          for i := 0 to length(temp) - 1 do a[i] := temp[i];
          temp := nil;
          
          writeln('Записи успешно добавлены!');
        
      end;
      
      4:
        begin
          write('Введите позицию для ее удаления из массива...');
          readln(posit);
          
          if posit <= 0 then posit := 1;
          if posit >= length(a) then posit := length(a);
          writeln('******************************************');
          writeln('Запись ', posit, ' будет удалена!');
          preview(a[posit - 1]); 
          writeln('******************************************');
          writeln('Запись удалена!');
          writeln();
          
          writeln('Результат после удаления...!');
          
          if temp <> nil then temp := nil;
          setlength(temp, Length(a) - 1);
          
          k := 0;
          
          for i := 0 to length(a) - 1 do
            
            if (i <> posit - 1) then 
            begin
              temp[k] := a[i];
              inc(k);
            end;
      
          
          a := nil;
          setlength(a, length(temp));
          
          for i := 0 to length(temp) - 1 do
          begin
            a[i] := temp[i];
            writeln('Запись номер ', i + 1);
            preview(a[i]);
            writeln;
          end;                           
        end;
      
      
      5:
      begin
        writeln('Введите фамилию, по которой нужно найти!');
        readln(obr);
        
        k:=0;
        
        for i:=0 to length(a)-1 do
        if pos(obr,a[i].fam)>=1 then 
        begin
          preview(a[i]);
          writeln();
          inc(k);
        end;
        if k=0 then writeln('Записей начинающихся на "',obr,'" не найдено! ') else
          writeln('Записей, начинающихся на "',obr,'" найдено: ',k);
      end;
   
      6: 
        begin
          if a <> nil then
            a := nil;
          writeln('Очистка массива выполнена!');
        end;
      
      0: exits := true;
    
    end;
    
    if menu <> 0 then begin
      writeln();
      writeln(' Нажмите enter для выхода в меню..');
      readln;
    end;
  until exits;    
  
  
  
  writeln('До свидания!');
  if a <> nil then  
    a := nil;
  
  
  
  
end.
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ удаление элемента списка NinjaNoob Помощь студентам 1 28.01.2013 04:01
Удаление элемента из списка bpystep Помощь студентам 4 09.07.2010 14:55
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54
удаление элемента из списка aurora_87 Общие вопросы C/C++ 1 18.06.2009 14:02