N değerine göre hesap yapan program

Başlatan Çağrı07, 04 Ağustos 2018 - 21:30:25

« önceki - sonraki »

0 Üyeler ve 6 Ziyaretçi konuyu incelemekte.

Çağrı07

Herkese merhabalar; Bir sorum var;
Klavyeden girilen N değerine göre(N>=20 şartını sağlayana kadar N sayısı istenecek.) 10 ile N arasındaki tüm sayıların toplamını 5 ile N arasındaki tek sayıların çarpımı 14 ile N arasındaki çift sayıların aritmetik ortalamasını bulup ekranda gösteren programı python dili ile yazmam gerekiyor. Nasıl yazarız? Yardımcı olur musunuz? Teşekkürler.
---------------------------------
10 ile N arasındaki sayıların toplamını bulabildim; Daha kolay yolu varsa yardımcı olun lütfen :\
toplam=10;
sayac=11;
n = int(input("Bir sayi girin:"));

if (n is 20 or n>20):
    print("bildiniz")

    while (sayac < n):
        toplam += sayac
        sayac += 1
    print("toplami: {}, ".format(toplam))

else:
    print("Lütfen 20 veya daha büyük bir sayi giriniz")


Gerisini yapamadım
Yaşlanıyorum...

programmer

Nasıl yazarız? değil ama algoritmayı hangi mantıkla kurmalıyız olmalı doğru soru. Çinlilerin dediği gibi balık vermek dseğil balık tutmasını öğretmek...
N sayının tek mi çifti olduğunu nasıl anlarız? Bunu için mod alma işlemini kullan abilir mesela.  Eğer tek sayı ise birinci toplamı hesaplarken dahil edeceğiz, ikincisinde ise hariç; yok çift sayı ise bunun tersini yapacağız.

By_BooMeranG

#2
Kendi çapımda öğrenmeye çalışıyorum bir kaç gündür. Biraz özensiz yapmış olabilirim ancak mantığını görmeye yardımcı olacaktır diye düşünüyorum.


Not: Gece geç saatte yaptığımdan 14 ile N sayısı arasındaki çift sayıların toplamını bulmuşum ancak aritmetik ortalamasını almayı unutmuşum. Basitçe bulunan toplamı (14-N arasındaki çift sayılar) sayı sayısına bölersen aritmetik ortalama sonucunu vermiş olur



https://paste.ubuntu.com/p/ybZZTCmCzk/

programmer


cosmicowl

#4

n = int(input("Sayı giriniz:"))
toplam = 0
toplamiki=1
toplamuc=0
toplamdort=0
liste = []
while n >= 20:
for i in range(10,n):
toplam+=i                           
print(toplam)
for j in range(5,n):
if j % 2 != 0:             
toplamiki *= j
print(toplamiki)
for k in range(14,n):
if k % 2 == 0:           
liste.append(k) #k'nin iki ile bölümünden kalan 0 ise çift olduğundan listeye ekledik.
for m in liste:
toplamuc +=m            #m değişkenini liste içerinde döndürüp toplamını toplamuc değişkenine eşitledik
toplamdort= toplamuc/len(liste)  #aritmetik ortalaasını bulmak için listenin uzunluğuna böldük.
print(toplamdort)

break

By_BooMeranG

Alıntı yapılan: programmer - 05 Ağustos 2018 - 07:37:52
Mesela
N%2=0 ise N tek mi çift mi olur?

Çift olur.. Modüler aritmetik..

N sayısı sürekli 2'ye bölünür. En son kalana bakılır. Kalan 1 ise tek 0 ise çifttir.

Çağrı07

#6
Hocamlarım; şu kodlama 2 saatten fazlasını aldı ama çok şey öğrendim ve program gördüğüm kadarıyla sorunsuz çalışıyor.
toplam=0;
sayac=11;
sayac2=12;
toplam2=0;
toplam3=0;
sayac3=7;
carpim=7;
sayac4=8;
sayac5=16;
toplam5=0;

n = int(input("Bir sayi girin:"));

if (n is 20 or n>20):
    print("bildiniz")

    while (sayac < n):
        toplam += sayac
        sayac += 1
    print("10 ile; girilen değer arasindaki sayilarin toplami: {}, ".format(toplam))

    while (sayac2 < n):
        if (sayac2%2==0):
            toplam2 +=sayac2
        sayac2 += 1
    print("10 ile; girilen değer arasindaki çiftler toplami: {}, ".format(toplam2))

    while (sayac3 < n):
         if (sayac3%2==1):
             toplam3 +=sayac3
         sayac3 += 1
    print("5 ile; girilen sayi arasindaki tekler toplami: {}, ".format(toplam3))

    while (sayac4 < n):
         if (sayac4%2==1):
             carpim *=sayac4
         sayac4 += 1
    print("5 ile; girilen sayi arasindaki tekler carpimi: {}, ".format(carpim))

    while (sayac5 < n):
        if (sayac5%2==0):
            toplam5 +=sayac5
        sayac5 +=1
    print("14 ile; girilen sayi arasindaki çift sayıların ortalaması : {}, ".format((toplam5)/(n-10))

else:
    print("Lütfen 20 veya daha büyük bir sayi giriniz")

Ben tabi C ve C++ ile kodlamaya başladığım için o kültüre paralel gidiyorum (Bakıyorum yani nerdeyse amatör C veya C++  ;D ) Ama sizlerin kodlaması çok çok kısaymış. Onlarıda beğendim
Not: Son ortalamayı yanlış almış olabilirim. Telefondan düzeltmeye çalıştım hatalı olursa geceye doğru tekrar uğraşacağım
Yaşlanıyorum...

programmer

#7
Ben söyle kısaltmaya çalışırdım. do while döngüsü içinde koşul uygun olana kadar diziye ekle, sonra karşulaştırma vs.. Bakın C'de bu dinamik dizi imkanı yok, neden Pyton'un nimetlerinden yararlan mıyorsunuz?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 05, 2018, 22:17:43

[mention=640402]@Çağrı07[/mention]  [mention=640430]@By_BooMeranG[/mention]Sonunda beni de Pythoncu yaptınız ya, hayırlı olsun. :) Bir kontrol edin arkadaşlar doğru çalışıyor mu algoritma





#!/usr/bin/env python
# -*- coding: utf-8 -*-
sayilar=[]
sayi=0
toplam_10_N=0
carpim_5_N=1
toplam_14_N=0
sayac_14_N=0
ortalama_14_N=0
N=0;
condition=True
while condition:
    sayi=int(input("Bir sayi girin:"))
    sayilar.append(sayi)
    condition=sayi<20


N=sayi
for i in range(len(sayilar)):
    if 10 <= sayilar[i] and sayilar[i] <= N:
        toplam_10_N=toplam_10_N+sayilar[i]


    if 5 <= sayilar[i] and sayilar[i] <= N and sayilar[i]%2 !=0:
        carpim_5_N = carpim_5_N*sayilar[i]


    if 14 <= sayilar[i] and sayilar[i] <= N and sayilar[i]%2 ==0:
        toplam_14_N=toplam_14_N+sayilar[i]
        sayac_14_N=sayac_14_N+1


if sayac_14_N:
   ortalama_14_N=toplam_14_N/sayac_14_N


print "10 ile ",N," arasında girilen sayıların toplamı: ", toplam_10_N
print "5 ile ", N, " arasında girilen tek sayıların çarpımı: ", carpim_5_N
print "14 ile ",N," arasında girilen çift sayıların aritmatik ortalaması", ortalama_14_N



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Ağustos 2018 - 22:34:11

if carpim_5_N ==1 :
  carpim_5_N=0


printlerden önce bu satırı ekleme lazım. N harif 5'den az ise 1 çıköasın diye düzeltme

cosmicowl

[mention=640442]@Çağrı07[/mention]Neden direk sayıları kullanmak yerine değişkene atayıp kullanıyorsunuz? Bende python da pek tecrübeli sayılmam, merak ettim.

Çağrı07

Alıntı yapılan: cosmicowl - 06 Ağustos 2018 - 08:08:44
[mention=640442]@Çağrı07[/mention]Neden direk sayıları kullanmak yerine değişkene atayıp kullanıyorsunuz? Bende python da pek tecrübeli sayılmam, merak ettim.

Dünde buna benzer bi soru görmüştüm. Kusura bakmayın, islerden cevaplayamadım;
Hocam bende yeni başladım Python'a ve daha önce C++ kullandım ama ilk başladığım C diliydi ve C++'da da çok zorlanmadım. Python'i  yeni kullanmaya daha yeni öğrenmeye başladığım için  böyle oluyor  :)
Yaşlanıyorum...

.py

#10
@cosmicowl artan (sayac) bir sayı varsa degişken tanımlamak çok normal tanımlamssa hata verir. sayac sayac2 sayac3 ... 'i tanımlamak zorunda çünkü 1 artırarak döngüyü devam ettiriyor. ben gereksiz bir tanımlama göremedim. while ile yzdığı için bu kadar fazla değişken var farklı bir yol ile yzsaydı bir kaç değişkenle bu işi yazabilirdi. artık oda deneyimle olan bir şey....

Çağrı07

7 ile 11 arasındaki sayılar {8,9,10} toplamı Matematiğe göre şu şekilde olmalı 8+9+10=27 (ki bu Türkçe'ye göre de böyle)
Yani 14 ile girilen sayı arasındaki çift sayılar listesi veya dizisi (örneğin girilen sayı 21 için ) = { 16, 18, 20}
Yeni düzenlemeyi şu şekilde yaptım;

n = int(input("Bir sayı giriniz:"))
toplam=0
toplam2=0
toplam3=0
carpim1=1
liste=[]
toplam4=0
toplam5=0
toplamuc=0
toplamdort=0
while n >= 20:
    for i in range(11,n):
        toplam +=i
    print("10 ile girdiğiniz sayi arasindaki sayilar toplami {} ;   ".format(toplam))

    for j in range(11,n):
        if j%2==0:
            toplam2 +=j
    print("10 ile girdiğiniz sayi arasindaki çift sayilar toplami {} ;   ".format(toplam2))

    for k in range(6,n):
        if k%2==1:
            toplam3 +=k

    print("5 ile girdiğiniz sayi arasindaki tek sayilar toplami {} ;   ".format(toplam3))

    for l in range(6,n):
        if l%2==1:
            carpim1 *=l
    print("5 ile; girilen sayi arasindaki tekler carpimi: {}, ".format(carpim1))

    for s in range(15, n):
        if s % 2 == 0:
            liste.append(s)  # s'nin iki ile bölümünden kalan 0 ise çift olduğundan listeye ekledik.

    for m in liste:
        toplam4 += m  # m değişkenini liste içerinde döndürüp toplamını toplam4 değişkenine eşitledik
        toplam5 = toplam4 / len(liste)  # aritmetik ortalamasını bulmak için listenin uzunluğuna böldük.
    print("14 ile; girilen sayi arasindaki çift sayıların ortalaması : {} ; ".format(toplam5))
    break

Program bu şekilde güzel çalışıyor (2 günün sonunda  :D   )  ancak 32. satır (  for s in range(15, n):  ) bu satıran  itibaren gerisini anlamadım :/  Yardımcı olabilir misiniz?
Not: Sorunun istediğinden 1-2 fazla cevap var. Bunları kendime alıştırma olsun diye eklemiştim. Anlayışınıza teşekkürler
Yaşlanıyorum...

cosmicowl

@.py teteşekkürler
@Çağrı07. Aslında diğerleriyle aynı, s'yi 15 den n ye kadar gezdirip çift olanları listeye ekledik, sonra m yi liste içinde gezdirip her değerini topladık. Son olarak toplamı listedeki eleman sayısına böldük ki aritmetik ort bulalım.

Çağrı07

Alıntı yapılan: cosmicowl - 06 Ağustos 2018 - 13:47:23
@.py teteşekkürler
@Çağrı07. Aslında diğerleriyle aynı, s'yi 15 den n ye kadar gezdirip çift olanları listeye ekledik, sonra m yi liste içinde gezdirip her değerini topladık. Son olarak toplamı listedeki eleman sayısına böldük ki aritmetik ort bulalım.

Çok iyi oldu hocam teşekkür ederim Allah razı olsun :)
Yaşlanıyorum...

programmer

#14
Alıntı yapılan: Çağrı07 - 06 Ağustos 2018 - 12:07:59
7 ile 11 arasındaki sayılar {8,9,10} toplamı Matematiğe göre şu şekilde olmalı 8+9+10=27 (ki bu Türkçe'ye göre de böyle)
Yani 14 ile girilen sayı arasındaki çift sayılar listesi veya dizisi (örneğin girilen sayı 21 için ) = { 16, 18, 20}
Yeni düzenlemeyi şu şekilde yaptım;

n = int(input("Bir sayı giriniz:"))
toplam=0
toplam2=0
toplam3=0
carpim1=1
liste=[]
toplam4=0
toplam5=0
toplamuc=0
toplamdort=0
while n >= 20:
    for i in range(11,n):
        toplam +=i
    print("10 ile girdiğiniz sayi arasindaki sayilar toplami {} ;   ".format(toplam))

    for j in range(11,n):
        if j%2==0:
            toplam2 +=j
    print("10 ile girdiğiniz sayi arasindaki çift sayilar toplami {} ;   ".format(toplam2))

    for k in range(6,n):
        if k%2==1:
            toplam3 +=k

    print("5 ile girdiğiniz sayi arasindaki tek sayilar toplami {} ;   ".format(toplam3))

    for l in range(6,n):
        if l%2==1:
            carpim1 *=l
    print("5 ile; girilen sayi arasindaki tekler carpimi: {}, ".format(carpim1))

    for s in range(15, n):
        if s % 2 == 0:
            liste.append(s)  # s'nin iki ile bölümünden kalan 0 ise çift olduğundan listeye ekledik.

    for m in liste:
        toplam4 += m  # m değişkenini liste içerinde döndürüp toplamını toplam4 değişkenine eşitledik
        toplam5 = toplam4 / len(liste)  # aritmetik ortalamasını bulmak için   listenin uzunluğuna böldük.
    print("14 ile; girilen sayi arasindaki çift sayıların ortalaması : {} ; ".format(toplam5))
    break

Program bu şekilde güzel çalışıyor (2 günün sonunda  :D   )  ancak 32. satır (  for s in range(15, n):  ) bu satıran  itibaren gerisini anlamadım :/  Yardımcı olabilir misiniz?
Not: Sorunun istediğinden 1-2 fazla cevap var. Bunları kendime alıştırma olsun diye eklemiştim. Anlayışınıza teşekkürler
Bu kodda while döngüsü içinde sayıları almıyor bir tane sayı alıyor. Çalışmaz bu kod bu haliyle, benmiz yazdığım kod çalışıyor.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 06, 2018, 23:07:22

Beni yazdığım kodda N 'den başka fazla değişken yok ,,sayi'yi da kullanabilirsin. Ama soruda geçiyor diye özellikle fazladan ekledim.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 06, 2018, 23:36:43

Alıntı yapılan: .py - 06 Ağustos 2018 - 11:16:46
@cosmicowl artan (sayac) bir sayı varsa degişken tanımlamak çok normal tanımlamssa hata verir. sayac sayac2 sayac3 ... 'i tanımlamak zorunda çünkü 1 artırarak döngüyü devam ettiriyor. ben gereksiz bir tanımlama göremedim. while ile yzdığı için bu kadar fazla değişken var farklı bir yol ile yzsaydı bir kaç değişkenle bu işi yazabilirdi. artık oda deneyimle olan bir şey....
toplamı ve çarğımı doğrudan yap<rsını<z nbular için ayac tanımlanmak zorun da değil. Benim gönderdiğim çalışan kodu inceleyin.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 06 Ağustos 2018 - 23:45:18

Sanki sayılar sıralı girilevek miş gibi düşünmüşünüz, Oysa nasıl gireleceğin bilemeyiz. Onun için bir diziye atıp  baştan benim yaptığım gibi kontro k etmeniz gerekir.

Çağrı07

Alıntı yapılan: programmer - 06 Ağustos 2018 - 23:05:36
Bu kodda while döngüsü içinde sayıları almıyor bir tane sayı alıyor. Çalışmaz bu kod bu haliyle, benmiz yazdığım kod çalışıyor.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 06, 2018, 23:07:22

Hocam sizin program da n için 23 sayısını girdiğimde şöyle diyor;
"10 ile  23  arasında girilen sayıların toplamı:  23
5 ile  23  arasında girilen tek sayıların çarpımı:  23
14 ile  23  arasında girilen çift sayıların aritmatik ortalaması 0"
Demek istediğinizi anlamadım?
Benim programımda çalışıyor ama. Windows Pycharm kullanıyorum
Yaşlanıyorum...

By_BooMeranG

Benim yazdığım işini görmedi mi?  :)

programmer

#17
r artimatik ortalamada , artık onu da siz bulun düzeltin .pyton2 olarak çalıştırcaksınız beinmkini veya print'leri düzenleyip pyton3 olarak çalıştırabilirsiniz. Sizin ki 20' veya büyüğe kadar nasıl döngüye giriyor anlamadım. kodda öyle bir döngü yok ki? Sayılar sıralı girilmeyebilir. illa veya küçükten büyüğe, bir algoritma istediğiniz gib ideğil her veri giriş durumunda doğru çalışmalı.
Burda bir döngü yok, nasıl doğru çalışyor Window'da başka  (mucizevi şekilde istediğiniz gibi :) )Linuxde başka mı çalışıyor Python


n = int(input("Bir sayı giriniz:"))



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 08, 2018, 00:29:56

Beni yazdığım kod doğru,  ödevdeki soruyı bir daha okuyun ve dikkatli olarak çıktıları karşılaştırın.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 08, 2018, 00:32:28

[mention=640453]@.py[/mention]
bir de sen bakar mısın? Arkadaşların kodu Windows'dadoğru olarak çalışıyormuş. Linuz'da bir sayı alıp çıkıyor. Magic sayı sanki değil mi? :))


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Ağustos 2018 - 00:48:00

[mention=640506]@Çağrı07[/mention] önce ödevi iki defa okumanı öneririm. Sen çünkü ödevin istediğinden başka bir şeyi sayı dizileriyle hesap yapıyorsun. Önce problemi basitleştirelim, 20 veya daha büyük sayı girilene kadar tek tek girilen sayıları bir dizeye kaydedin, sonra da bu diziyi yazdırın. bunu bir while döngüsü ile alıp for döngüsüyle yazdırmanız gerekir. Öyle ilk on sayıyı sıralı girseydi gibi kabullerle olnmaz bu işe 5,15,4,10, 17, 19 rastgele sayılar girilecek bu durumda da bütün dizideki elemanları tek tek kontrol etmen gerekecek hem aralık kontrolü hem de tek mi çift mi kontrolü benim kodumda yaptığımda bu.

.py

[mention=640445]@programmer[/mention] dostum sanırım dalgınlığına geldi  liste kullandığın için 20 den büyük tek sayı girildiğinde problem çıkıyor 21den küçük birden fazla sayı girdiğinde sorun yok ama senin algoritman aralarında en mantıklısı. senin kodda bazı değişiklikler yaptım.

https://repl.it/@YazilimDunyasi/NN

programmer

#19
Bitin girilen sayıların ritmatik ortamasın değil çift sayıların aritmatik ortlamasını alıyorum. Aslında onları diziye alıp yazarken şu şu öift sayılar diye belirtilse daha anlaşılır olurdu.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ağustos 08, 2018, 01:40:05

Alıntı yapılan: Çağrı07 - 04 Ağustos 2018 - 21:30:25
Herkese merhabalar; Bir sorum var;
Klavyeden girilen N değerine göre(N>=20 şartını sağlayana kadar N sayısı istenecek.) 10 ile N arasındaki tüm sayıların toplamını 5 ile N arasındaki tek sayıların çarpımı 14 ile N arasındaki çift sayıların aritmetik ortalamasını bulup ekranda gösteren programı python dili ile yazmam gerekiyor. Nasıl yazarız? Yardımcı olur musunuz? Teşekkürler.
---------------------------------
10 ile N arasındaki sayıların toplamını bulabildim; Daha kolay yolu varsa yardımcı olun lütfen :\
toplam=10;
sayac=11;
n = int(input("Bir sayi girin:"));

if (n is 20 or n>20):
    print("bildiniz")

    while (sayac < n):
        toplam += sayac
        sayac += 1
    print("toplami: {}, ".format(toplam))

else:
    print("Lütfen 20 veya daha büyük bir sayi giriniz")


Gerisini yapamadım


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Ağustos 2018 - 01:58:16

işte bu da Python3 versiyonu, şu çıkıyor, ama bu çıkması lazım diye kimse bir şey söylemiyor. Ama ben eminim. çıkması gereken çıkıyor. Algoritma doğru ve çalışıyor. Ama arkadaşın kemdi kodunu vermesini isterim, herkes yanlış yaptığını kabul etmek isemez. Olur a belki ben yanlış yapmışımdır. Sonra hocasına bu kodu ikinci olarak götürsün. Zaten hazır ödev doğru değil aslında gaza geldim çözdüm. Bu da son.



#!/usr/bin/env python
# -*- coding: utf-8 -*-
sayilar=[]
sayi=0
toplam_10_N=0
carpim_5_N=1
toplam_14_N=0
sayac_14_N=0
ortalama_14_N=0
N=0;
condition=True
while condition:
    sayi=int(input("Bir sayi girin:"))
    sayilar.append(sayi)
    condition=sayi<20


N=sayi
for i in range(len(sayilar)):
    if (10 <= sayilar[i]) and (sayilar[i] <= N):
        toplam_10_N=toplam_10_N+sayilar[i]


    if (5 <= sayilar[i]) and (sayilar[i] <= N) and (sayilar[i]%2 !=0):
        carpim_5_N = carpim_5_N*sayilar[i]


    if (14 <= sayilar[i]) and (sayilar[i] <= N) and (sayilar[i]%2 ==0):
        toplam_14_N=toplam_14_N+sayilar[i]
        sayac_14_N=sayac_14_N+1


if sayac_14_N:
   ortalama_14_N=toplam_14_N/sayac_14_N
if carpim_5_N == 1:
   carpim_5_N=0
print ("10 ile {0} arasında girilen sayıların toplamı: {1}".format(N,toplam_10_N))
print ("5 ile {0} arasında girilen tek sayıların çarpımı: {1}".format(N, carpim_5_N))
print ("14 ile {0} arasında girilen çift sayıların aritmatik ortalaması: {1}".format(N,ortalama_14_N))



Dagiztanli08

if (n is 20 or n>20): kardeşim is komutunu kullanmamanı tavsiye ederim bellekteki yerini bulur sen == komutunu kullan == ve is aynı işlevi vermemektedir eğer if 20 ye eşitse gibi bir kullanım yapacaksanız == kullanmanızı tavsiye ederim :)