Сума на нечетните числа – в три варианта

Да се напише програма, която позволява:

  1. да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.
  2. да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.
  3. да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.

Нарочно задавам три уж подобни като условие, но всъщност доста различни задачи. Помислете как може да бъде решена всяка от тях и вижте кое е общото и различното между решенията.

Публикувано в с етикети . Постоянна връзка.

10 Responses to Сума на нечетните числа – в три варианта

  1. kaloyan каза:

    1. Да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.

    VAR n,i,suma : integer;
    BEGIN
      write('vavedi n: '); readln(n);
      suma:=0;
        for i:=1 to n do
          begin
            if ((i mod 2 <> 0) or (i=1)) then writeln(i);
          end;
    readln;
    END.           
    

    2. Да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.

    VAR n,i,suma : integer;
    BEGIN
      write('vavedi n: '); readln(n);
      suma:=0;
        for i:=1 to n do
          begin
            if ((i mod 2 <> 0) or (i=1)) then suma:=suma+i;
          end;
      writeln('sumata na nechetnite chisla e ',suma);
    readln;
    END.       
    

    3. Да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.

    VAR n,i,suma,chislo : integer;
    BEGIN
      write('kolko chisla shte vavejdate: '); readln(n);
      suma:=0;
      for i:=1 to n do begin
        write('vavedi chislo: '); readln(chislo);
          if (i mod 2  0) then suma:=suma+chislo;
      end;
      writeln(suma);
    readln;
    END.
    
    • Данаил каза:

      Калояне, първото решение не пресмята и не отпечатва сумата на числата. Във второто – не позволяваш да се въведат числа, нито ги сумираш. В третото решение си пропуснал знака за различно.

      Освен това няма нужда да проверяваш дали (i=1). (i mod 2 <> 0) ще включи и него.

  2. Lora9631 каза:
    VAR i , suma ,  n : integer;
    Writeln('Vavedete n:');
     readln(n);
    suma:=0
      for i:=1 to n do
        begin
        if((i mod 2 <> 0) or (1=1)) then
        end
        Readln;
    end.
               
    
  3. kaloyan каза:

    1. Да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.

    VAR n,i,suma : integer;
    BEGIN
      write('vavedi n: '); readln(n);
      suma:=0;
        for i:=1 to n do
          begin
            if (i mod 2 <> 0) then
               begin
                 writeln(i);
                 suma:=suma+i;
               end;
          end;
      writeln('sumata na nechetnite chisla v intervala ot 1 do ',n,' e ',suma);
    readln;         
    END.        
    

    2. Да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.

    VAR n,i,suma,chislo : integer;
    BEGIN
      write('vavedi n: '); readln(n);
      suma:=0;
      for i:=1 to n do
          begin
            write('vavedi chislo: '); readln(chislo);
              if (chislo mod 2 <> 0) then suma:=suma+chislo;
          end;
      writeln('sumata na vavedenite nechetni chisla e ',suma);
    readln;
    END.   
    

    3. Да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.

    VAR n,i,suma,chislo : integer;
    BEGIN
      write('kolko chisla shte vavejdate: '); readln(n);
      suma:=0;
      for i:=1 to n do begin
        write(i,': '); readln(chislo);
          if (i mod 2 <> 0) then suma:=suma+chislo;
      end;
      writeln('sumata na chislata na nechetnite redove e ',suma);
    readln;
    END.  
    

    ПП: Съжалявам, че бях объркал задачите, но не съм чел условията както трябва :)

  4. dreanor каза:
    program Project1;
    var m,s:integer;
        n,i:real;
    begin
    write('wawedi kraino chislo N: ');
    readln(n);
    m:=1;
    s:=trunc(n);
    if ((s mod 2) > 0) then
       begin
            n:=n+1;
            i:=n/2;
            repeat
            m:=m+2;
            writeln(m:26);
            until (m=(n-1));
       end;
    if ((s mod 2)=0) then
        begin
             i:=n/2;
             repeat
            m:=m+2;
            writeln(m:27);
            until (m=(n-1));
        end;
    writeln('sumata na nechetnite e: ',i*i:0:0);
    readln;
    end. 
    

    Сметнах, че ще е добре да я реша по друг начин след като видях горните решения.

    Ще добавя решенията на другите две условия по-късно.

    • Данаил каза:

      Калояне, много се радвам, че се включваш с решение, при това толкова оригинално! Ще ми е интересно да видя и другите две.

      По това решение – имаш малка грешка – не започва от 1, а от 3. Другото е, че програмата изглежда прекалено сложна. За да се опрости, гледаш кои са общите неща в двата if-а и ги изнасяш извън тях. Ето:

      program Project1;
      var m,s:integer;
          n,i:real;
      begin
        write('wawedi kraino chislo N: ');
        readln(n);
        m:=-1;
        s:=trunc(n);
        if ((s mod 2) > 0) then
          n:=n+1;
        i:=n/2;
        repeat
          m:=m+2;
          writeln(m:26);
        until (m=(n-1));
        writeln('sumata na nechetnite e: ',i*i:0:0);
        readln;
      end.
      

      Може дори и още да се опрости, ако се използва div.

  5. dreanor каза:

    Включвам се с решенията на останалите 2 условия:

    2.

    program chisla2;
    var a,b,i,m:integer;
    begin
    write('wawedi broq na chislata za wuwejdane: ');
    readln(a);
    m:=0;
    i:=0;
    repeat
          begin
          m:=m+1;
          write('wawedi chislo: ');
          readln(b);
          if ((b mod 2) > 0) then i:=i+b;
          end;
    until m=a;
    writeln('sumata na nechetnite ot ',a,' chisla e: ',i);
    readln;
    end.
    

    3.

    program chisla3;
    var a,b,i,m:integer;
    begin
    write('wawedi broq na chislata za wuwejdane: ');
    readln(a);
    m:=1;
    i:=0;
    repeat
          begin
          write('wawedi chislo: ');
          readln(b);
          if ((m mod 2) <> 0) then i:=i+b;
          m:=m+1;
          end;
    until m=(a+1);
    writeln('sumata na nechetnite po red na wudejdane ot ',a,' chisla e: ',i);
    readln;
    end.
    
    • Данаил каза:

      Калояне, верни са и двете. Ако мога да дам някакви препоръки за подобряване на програмите, то: кода на програмата ще е по-лесен за четене, ако използваш цикъл for вместо repeat/until – след като са поредни стойности с фиксирано начало и край, цикъла for е точно за това. Ако сложиш и говорящи имена на променливите, програмата сама ще обяснява за какво е и какво прави :-)

Вашият коментар