Задача

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 28 Jun 2011.

  1. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    436
    Reputations:
    288
    задача такова,ввести допустим 5 элементов которые больше 1.и заполнить массив индексами чисел делящихся на 13 и 17.
    навоял тут чуток,ну что то не понимаю почему не пашет,заработался уже не соображаю.вот черновой вариант.
    Code:
     
    program Project2;
    
    {$APPTYPE CONSOLE}
    var a:array[1..5]of integer;
    i,n:integer;
    begin
    writeln('Ishodnyi massiv');
    for i:=1 to 5 do
    readln(a[i]);{ читаем 5 чисел }
    if a[i]<=1 then writeln('no!'); { если меньше,равно 1 то выводим сообщение(вот тут че то оно не то }
    for i:=1 to 5 do
    write(a[i]:4); { выводим введенные элементы  }
    readln;
    n:=a[1]; { сортируем пузырьком } 
    for i:=2 to 5 do
    if a[i]>=n then n:=a[i];
    for i:=1 to 5 do
    if a[i]mod 13=0 then a[i]:=5; {числам делящимся на 13 присваиваем 5 }
    writeln('noviy massiv'); { выводим новый массив } 
    for i:=1 to 5 do
    write(a[i]:4);
    readln;
    
    
    
    end.
    
    в общем допилите за меня код что бы проверка работала и деление на 13 и 17,я так понял что надо проверять остаток.+ сделать вывод не нового массива,а индексов которые делятся на 13 и 17.котелок не варит:)
     
    _________________________
  2. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    297
    Likes Received:
    42
    Reputations:
    25
    Code:
    program Project2;
    
    {$APPTYPE CONSOLE}
    var a:array[1..5]of integer;
    i,n,j:integer;
    begin
    writeln('Ishodnyi massiv');
    for i:=1 to 5 do begin   
     readln(a[i]);
     if a[i]<=1 then writeln('no!'); 
    end;   
    for i:=1 to 5 do write(a[i]:4); 
    readln;
    
    
    
    {n:=a[1];
    for i:=2 to 5 do
    if a[i]>=n then n:=a[i];}
    For i := 4 downto 1 do
        For j := 1 to i do
        begin
          if a[j] > a[j + 1] then begin
           n:= a[j];
           a[j]:= a[j + 1];
           a[j + 1]:=n;
          end;
        end;
    
    
    for i:=1 to 5 do begin
     if (a[i] mod 13)=0 then a[i]:=5; 
     if (a[i] mod 17)=0 then a[i]:=15;
    end;
    writeln('noviy massiv'); 
    for i:=1 to 5 do  write(a[i]:4);
    readln;
    
    
    
    end.
     
  3. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    436
    Reputations:
    288
    ты походу не понял моего поста,смотри допустим если среди этих чисел есть >=1 тогда выводить сообщение,и дальше не продолжать работу,если же все числа >1 тогда проверить их делимость на 13 и 17,и записать в массив индексы,то есть не сами числа массива ,а вот например массив :
    13 3 4 5 26
    а вывод такой
    a[1] a[5]
    а почему не проверяется весь массив ,а только после каждого нажатия enter мне тоже странно как то
     
    _________________________
  4. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    297
    Likes Received:
    42
    Reputations:
    25
    Code:
    program Project2;
    
    {$APPTYPE CONSOLE}
    var a:array[1..5]of integer;
        intArMassivIndex:array [1..5] of integer;
        intMaxMassivIndex:integer;
    i,n,j:integer;
    begin
    intMaxMassivIndex:=0;
    writeln('Ishodnyi massiv');
    for i:=1 to 5 do begin
     readln(a[i]);
     if a[i]<=1 then begin
      writeln('no!');
      halt;
     end;
    end;
    for i:=1 to 5 do write(a[i]:4);
    WriteLn;
    
    
    For i := 4 downto 1 do
        For j := 1 to i do
        begin
          if a[j] > a[j + 1] then begin
           n:= a[j];
           a[j]:= a[j + 1];
           a[j + 1]:=n;
          end;
        end;
    
    writeln('Massiv posle sortirovki');
    for i:=1 to 5 do write(a[i]:4);
    WriteLn;
    
    for i:=1 to 5 do begin
     if ((a[i] mod 13=0) or (a[i] mod 17=0)) then begin
      inc(intMaxMassivIndex);
      intArMassivIndex[intMaxMassivIndex]:=i;
     end;
    end;
    writeln('Massiv indexov');
    for i:=1 to intMaxMassivIndex do  write(intArMassivIndex[i]:4);
    readln;
    
    
    end.

    А вот это не понял
     
  5. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    297
    Likes Received:
    42
    Reputations:
    25
    Вот вариант с проверкой данных после ввода всех чисел

    Code:
    program Project2;
    
    {$APPTYPE CONSOLE}
    var a:array[1..5]of integer;
        intArMassivIndex:array [1..5] of integer;
        intMaxMassivIndex:integer;
    i,n,j:integer;
    begin
    intMaxMassivIndex:=0;
    writeln('Ishodnyi massiv');
    for i:=1 to 5 do readln(a[i]);
    
    for i:=1 to 5 do begin
     if a[i]<=1 then begin
      writeln('Invalid data.Halt...');
      halt;
     end;
    end;
    
    for i:=1 to 5 do write(a[i]:4);
    WriteLn;
    
    
    For i := 4 downto 1 do
        For j := 1 to i do
        begin
          if a[j] > a[j + 1] then begin
           n:= a[j];
           a[j]:= a[j + 1];
           a[j + 1]:=n;
          end;
        end;
    
    writeln('Massiv posle sortirovki');
    for i:=1 to 5 do write(a[i]:4);
    WriteLn;
    
    for i:=1 to 5 do begin
     if ((a[i] mod 13=0) or (a[i] mod 17=0)) then begin
      inc(intMaxMassivIndex);
      intArMassivIndex[intMaxMassivIndex]:=i;
     end;
    end;
    writeln('Massiv indexov');
    for i:=1 to intMaxMassivIndex do  write(intArMassivIndex[i]:4);
    readln;
    
    
    
    end.
     
    #5 Steam[777], 29 Jun 2011
    Last edited: 29 Jun 2011
  6. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    436
    Reputations:
    288
    хех)введи в программу 2 3 34 6 17 например, выдается 4 и 5 индекс,а тут 3 и 5
     
    _________________________
  7. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    297
    Likes Received:
    42
    Reputations:
    25
    У тебя сортировка(причём кривая) зачем запихнута в исходный код?
    Code:
    n:=a[1]; { сортируем пузырьком } 
    for i:=2 to 5 do
    if a[i]>=n then n:=a[i];
    Я сделал по твоему исходнику. Не нужно сортировки - убери этот кусок кода

    Code:
    For i := 4 downto 1 do
        For j := 1 to i do
        begin
          if a[j] > a[j + 1] then begin
           n:= a[j];
           a[j]:= a[j + 1];
           a[j + 1]:=n;
          end;
        end;
     
    1 person likes this.
  8. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    436
    Reputations:
    288
    тьфу,точняк.терь все.спасибо,насчет проверки надо разобраться...
     
    _________________________
  9. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    297
    Likes Received:
    42
    Reputations:
    25
    Посмотри последний вариант - я сделал,чтоб проверка после ввода всех чисел шла
     
  10. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    436
    Reputations:
    288
    Отлично,благодарствую еще раз.
     
    _________________________
Loading...