Чертов Паскаль

Discussion in 'Болталка' started by Omen666, 21 Dec 2010.

  1. Omen666

    Omen666 Elder - Старейшина

    Joined:
    3 Aug 2006
    Messages:
    339
    Likes Received:
    503
    Reputations:
    36
    помогите пожалуйста... у меня логика отсутсвует...
    -----
    Одномерный массив заполняется случйными целыми числами от -50 до +50. Если кол-во отрицат. элементов больше, то сделать их с плюсом. Если колв-во положительных, то сделать из с минусом.
    :( :(
     
  2. EndLeSSDre@M

    EndLeSSDre@M Banned

    Joined:
    18 Jul 2009
    Messages:
    142
    Likes Received:
    99
    Reputations:
    -5
    PHP:
    uses crt;
    var 
    a:array[1..100of integer;
    i,k,l,x:integer;
    begin
          randomize
    ;
          
    write('Введите размерность массива:');
          
    readln(x); 
                for 
    i:=1 to x do
                
    begin
                      a
    [i]:=Random (50) -100;
                      
    write(a[i],' ');
                      if 
    a[i]<0 then k=k+1;
                      if 
    a[i]>0 then l=l+1;
                
    end;

               if 
    k>l then begin
                      
    for i:=1 to x do
                      
    begin
                            
    if a[i]<0 then a[i]=-a[i];
                      
    end;
                
    end;
                else 
    begin
                      
    for i:=1 to x do
                            
    begin
                                  
    if a[i]>0 then a[i]=-a[i];
                            
    end;
                      
    end;
                
    end;
          for 
    i:=1 to x do
          
    begin
                write
    (a[i],' ');
          
    end;
    end.
    как то так... думаю ошибки сможешь подправить, но суть такая... давно с паскалем не общался
     
  3. Renji

    Renji Member

    Joined:
    5 Dec 2010
    Messages:
    24
    Likes Received:
    5
    Reputations:
    0
    Синтаксиса Паскаля я не помню, но задачу можно обозначить следующим образом.
    Создаём инкрементный цикл с начальным значением -50, конечным - 50. Каждая итерация цикла должна генерировать случайное число, допустим -1 ИЛИ 1. Присваиваем массиву с индексом шага итерации то самое случайное число. Проверяем, если число отрицательное, то инкрементируем значение одной переменной, иначе - другой. После цикла инициации массива проверяем значения переменных, которые являются счётчиком отрицательных/положительных значений массива. И исходя из них, в новом цикле изменяем значения массива.

    P.S. Накосячил с условием. Начальный и конечный шаги цикла изменить под нужное значение. Радиус генерации изменить на -50 и 50. Кстати, что там с нулём? Его следует считать как положительное, или вообще не учитывать в счётчике? =)
    Этот пост не показывает решение, а лишь указывает на алгоритм реализации, из чего следует более пользы, чем от копирования готового результата. Так что постарайся решить сам. В крайнем случае подсмотри на ответ комрадов.
     
  4. waik

    waik Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    404
    Likes Received:
    163
    Reputations:
    12
    Code:
    program xxx;
    
    Var
      a:array[1..101] of integer;
      i,k,j,h:byte;                         [COLOR=Green] {j-Счетчик отрицательных чисел,h-положительных}[/COLOR]
    Begin
      randomize;
      Write('k:');Readln(k);
    
      For i:=1 to k do
        Begin
          a[i]:=Random(101)-50;
          If a[i] < 0 then j:= j+1;          [COLOR=Green]{считаем кол-во отриц. чисел}[/COLOR]
          If a[i] >= 0 then h:= h+1;         [COLOR=Green]{считаем кол-во полож. чисел}[/COLOR]
          Writeln('a[',i,']= ',a[i]);
        End;
    
       If j > h then                          [COLOR=Green]{Если отриц. больше то}[/COLOR]
        Begin
          For I:= 1 to k do
            If a[i] < 0 then a[i]:=a[i]*-1   [COLOR=Green]{То каждый отриц.эл. делаем полож}[/COLOR]
        End
      Else                                   [COLOR=Green]{Если полож.больше то}[/COLOR]
        Begin
          For I:= 1 to k do
            If a[i] > 0 then a[i]:=a[i]*-1  [COLOR=Green] {То каждый полож.эл делаем отриц}[/COLOR]
        End;
    
        
       Writeln('===========');
       
        For i:=1 to k do                     [COLOR=Green]{Выводим массив}[/COLOR]
          Begin
            Writeln('a[',i,']= ',a[i]);
          End;
    End.
    
    Если отриц.элементов больше чем полож. то делаем все отриц.эл. положительными и наоборот. -Работает
     
    #4 waik, 21 Dec 2010
    Last edited: 21 Dec 2010
  5. Omen666

    Omen666 Elder - Старейшина

    Joined:
    3 Aug 2006
    Messages:
    339
    Likes Received:
    503
    Reputations:
    36
    Спасибо вам!
     
  6. MaTpOc

    MaTpOc Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    сделайте мне тоже плиз!!!!

    помогите с заданием, плиз(на паскале)

    Распечaтать анкетные данные студентов, получивших в послeднюю сессию оцeнки 2 и 3. (число учеников (n)>=10).

    вот нашел очень похожую:
    помогите переделать под мое задание

    Известен набор продуктов: хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В 3 магазина поставлены отдельные виды этих продуктов. Требуется построить множества А, В, С, которые содержат соответственно:
    • продукты, имеющиеся одновременно во всех магазинах;
    • продукты, имеющиеся, по крайней мере, в одном из магазинов;
    • продукты, которых нет ни в одном из магазинов.


    PHP:
    Const
    N=3;
    Type
    Product
    =(bread,butter,cheese,milk); {продукты  }
    Assort=set of product; {ассортимент продуктов  }
    Shop=array[1..nof assort; {наличие продуктов в магазинах  }

    Var
        
    M1:shop;
        
    XProduct;
    A,b,c,xm1assort;
    I,j,v,iw:integer;
    BEGIN
    For I:=1 to n do
        
    Begin
            Xm1
    :=[];
            
    Writeln(‘введите номера продуктов ‘,I:2-го магазина=);
            
    Repeat
                Read
    (iw);
                Case 
    iw of
                    1
    :x:=bread;
                    
    2:x:=butter;
                    
    3:x:=cheese ;
                    
    4:x:= milk;
                else
                    
    write(‘номера продуктов 1..4’);
                
    end;  {case}
                
    xm1:=xm1+[x];   {наличие продуктов в одном магазине  }
            
    until eoln;
    m1[1]:=xm1
    end
    ;     {конец цикла по магазинам }
    {
    получение множеств А,В,С  }
     
    A:=m1[1];
    B:=[];
    For 
    I:=1 to 3 do
    Begin
    A
    :=A*m1[1]; ];{одновременно во всех  
    B:=Bm1[1{хотя бы в одном  }
     
    C:=[ bread.. milk]-B;  {нет ни в одном  }
    End;
    For 
    I:=1 to 3 do
    Begin
            
    Case i of
                1
    Writeln(‘продуктыимеющиеся во всех магазинах ‘);
                
    2Writeln(‘ассортимент продуктов ‘);
                
    3Writeln(‘продуктыкоторых нет ни в одном магазине ‘);
            
    end;
    For 
    x:=bread to milk do
            If 
    x in a then
    Case x of
                    Bread
    Write(‘хлеб ‘);
                    
    ButterWrite(‘масло ‘);
                    
    CheeseWrite(‘сыр ‘);
                    
    MilkWrite(‘молоко  ‘);
                
    end;  {case}
            if 
    I:=1 then a:=b
                
    else
            
    a:=c;
            
    writeln
        end
    END
    .
     
  7. waik

    waik Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    404
    Likes Received:
    163
    Reputations:
    12
    MaTpOc-та как обычно,нехера не понятно.
     
  8. RAINUR

    RAINUR New Member

    Joined:
    24 May 2010
    Messages:
    151
    Likes Received:
    0
    Reputations:
    0
    Матрос:
    Code:
    Const N=10; //кол-во студентов
    
    Var name:array [1..N] of string;//массив с именами студентов
          ocenka:array [1..N] of string;//массив с оценками студентов за последнюю сессию.
    i:integer;//переменная счетчика
    
    begin
    For i:=1 to N do //от 1 до N
        Begin 
            Writeln(‘введите имя студента‘); 
            read(name[i]);   //считываем имя студента 
             writeln('введите его оценку за последнюю сессию');
               read(ocenka[i]); //считываем его оценку
                end; 
    
    for i:=1 to N do //от 1 до N
     if (ocenka[i]=2) or (ocenka[i]=3) then // если оценка i-ого студента равна 2 или 3, то..
       writeln(name[i]);//выведим его имя на экран. . 
    
    END. 
    
    Если я не ошибся, то все правильно ..
     
  9. Omen666

    Omen666 Elder - Старейшина

    Joined:
    3 Aug 2006
    Messages:
    339
    Likes Received:
    503
    Reputations:
    36
    Помогите еще раз пожалуйста http://twitpic.com/3j1sox
     
  10. Omen666

    Omen666 Elder - Старейшина

    Joined:
    3 Aug 2006
    Messages:
    339
    Likes Received:
    503
    Reputations:
    36
    1ую уже сделал)
     
  11. Omen666

    Omen666 Elder - Старейшина

    Joined:
    3 Aug 2006
    Messages:
    339
    Likes Received:
    503
    Reputations:
    36
    Нужна только 3
     
  12. Omen666

    Omen666 Elder - Старейшина

    Joined:
    3 Aug 2006
    Messages:
    339
    Likes Received:
    503
    Reputations:
    36
    Ребят, пожалуйста помогите с 3ей! У меня руки из жопки и из-за нее горит зачет....((((
    Используйте пожалуйста процедуры