Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача с одномерным массивом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zharatustra
Суть задачи состоит в том что надо найти минимальное и максимальное значение элементоа в массиве и поменять их местами. С первой половиной задачи я справился, а вот со второй вышла заминка. Подскажите, пожалуйста кто-н.

program n1;                                                                   
 uses crt;                                                                    
 var d: array[1..15] of integer;                                  
 max,min,n,i: integer;                                            
begin                                                                         
 clrscr;                                                                                                                                  
 write ('N=');                                                                
 readln (n);                                                                  
 for i:=1 to n do                                                             
  begin                                                                       
   writeln ('D[',i,']=');                                                     
   readln (d[i])                                                             
  end;                                                                        
  max:=d[1];                                                                  
   for i:=2 to n do                                                           
    if d[i]>max then                                                          
     max:=d[i];                                                               
  min:=d[1];                                                                  
   for i:=2 to n do                                                           
  if d[i]<min then                                                          
     min:=d[i];                                                                                                                                
     writeln ('max=',max,' min=',min);                                                                                            
 readln;                                                                      
end.                                                                          

Tan
добавь переменную например maxnomer, и храни там номер максимального элемента, так же с минимальным. Ка поменять сам уж разберёшься.
max:=d[1];           
maxnomer := 1;                                                       
   for i:=2 to n do                                                           
    if d[i]>max then              
     begin                                            
        max:=d[i]; 
      maxnomer := i;
     end;
compiler
оперидили smile.gif

Zharatustra
Ребята, извините, что опять обращаюсь, но не віходит с процедурой вывода массива, выводит то же что и было введено.
 
  min:=d[1];                                                                  
  minnomer:=1;                                                                
   for i:=2 to n do                                                           
   if d[i]<min then                                                           
     begin                                                                    
      min:=d[i];                                                              
      minnomer:=i                                                             
     end;                                                                     
  writeln ('MAX=',max,' MIN=', min);                                          
  for i:=1 to n do                                                            
   write (' ',d[i]);                                                          
 readln;                                                                      
end.  
 

Пожалуйста помогите устранить ошибку.
Tan
program n1;
 uses crt;
 var d: array[1..15] of integer;
 max,min,n,i: integer;
 maxnomer, minnomer : integer;
begin
 clrscr;
 write ('N=');
 readln (n);
 for i:=1 to n do
  begin
   writeln ('D[',i,']=');
   readln (d[i])
  end;
  max:=d[1];
  maxnomer := 1;
   for i:=2 to n do
    if d[i]>max then
    begin
     max:=d[i];
     maxnomer := i;
    end;
  min:=d[1];
  minnomer := 1;
   for i:=2 to n do
  if d[i]<min then
    begin
     min:=d[i];
     minnomer := i;
    end;
    d[minnomer] := max;
    d[maxnomer] := min;
    for i := 1 to n do write (d[i]:2);
     writeln ('max=',max,' min=',min);
 readln;
end.


Я просто дал начальную мысль, думал ты закончишь. Ну вот так выглядит, если брать твой пример за основу. Но это разумеется в случае если рассматривается смена 1 мин и макс элемента.
Zharatustra
Огромное СПАСИБО, Tan!!! И еще, если можно один вопрос - что означает
 (d[i]:2) 
? точнее зачем нужно двоеточее после d[i], я пробовал программа и так работает.
Tan
Чтобы при выводе расстояние между элементами массива было побольше.
Zharatustra
А понятно, то есть это как и при форматном выводе, вместо этого можно сделать и так
write (' ',d[i]); 
.
Tan
Простым языком говоря - 2 это число ячеек, отведённых для вывода элемента массива; так как элементы состоят из 1 цифры, то ещё 1 ячейка остаётся под пробел. Это не то же самое,
write (' ', d[i]);
так как в этом случае у тебя вне зависимости от размера числа (количества цифр) будет пробел перед следующим. Твой вариант для этой задачи тоже годен, так как он существенно ничего не меняет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.