C programlama Ödevi yardım !!!

GreyFoort

MB Üyesi
Kayıt
10 Mart 2018
Mesajlar
1
Tepkiler
0
Yaş
26
Herkese öncelikle iyi Forumlar. Benim kardeşim bu sene üniversiteye başladı bilgisayar mühendisliği ilk sınıf ve hocaları bi ödev vermiş ama nasıl yapılabileciği bilmiyoruz yardımcı olabilecek birileri var mı acabaa??
İstenilen şey ve soru şöyle;


Projenin amacı: Algoritma ve C programlama hakkında bilgi sahibi olmak
Kurallar: Ödevdeki kod sana ait olsun. Sorunu anlamak için ufak tefek sorular sorabilirsin. Kimsenin kodunu olduğu gibi kullanmamalısın.
Görev: Özel bir nicelik hesaplanacak. d10d9d8 ... d1 şeklindeki 10 basamaklı kodun en sağındaki d1, d1+2d2+3d3+4d4+......+10d10 (11'in katı) olacak şekilde belirlenir.
d1, 0-9 arası herhangi bir rakam.
(Örneğin, 020131452 için d1 değerini bulurken 2*2+3*5+4*4+5*1+6*3+7*1+8*0+9*2+10*0=83. 11'in katı için d1 değeri 5 olur.)
9 basamaklı sayıyı alıp onu 10 basamaklı şekilde basan bir program yap. (Sıfırları yazdırmazsan sıkıntı olmaz. Bunu tam anlamadım.)
GEREKSİNİMLER
- 9 basamaklı sayı kullanıcıdan komut satırı bağımsız değişkeni olarak alınmalıdır.
- Yukarıdaki görev "main()"den haricinde 2 fonksiyon olarak uygulanmalıdır.
- Bir fonksiyon, 9 basamaklı kodu parametre olarak alır ve d1'i hesaplar ve döndürür.
- Diğer fonksiyon, d10d9d8 ... d2 ve d1'i iki farklı parametre olarak alır ve sonuçta elde edilen 10 basamaklı kodu döndürür.
- "readme" adlı bir metin dosyası oluşturmak için bir editör kullanın. İçinde şu bilgiler bulunsun:
* Adın, öğrenci numaran, telefon numarası
* Yardım aldığın kişileri, birlikte çalıştğın kişileri belirt.
* Göreve ne kadar zaman harcadığının gösterkesi (isteğe bağlı)
* Ödev değerlendirmen: Öğrenmene yardımcı oldu mu? Ne öğrenmen için sana yardım etti? İyileştirme önerileriniz var mı? (isteğe bağlı)
- Kodunu yazarken bol bol açıklama yap. (YORUM SATIRI ŞEKLİNDE)
- "readme" dosyanız düz bir metin dosyası olmalı.
 

kocakus

MB Üyesi
Kayıt
15 Mart 2018
Mesajlar
31
Tepkiler
6
Yaş
43
Üniv
Orta Doğu Teknik Üniversitesi
Merhaba;
anlamadığınız kısım neresi acaba? size 9 basamaklı bir sayı verilecek siz de bunun sonuna bir basamak ekleyeceksiniz. kural belirgin. sizin sayınız 0-2-0-1-3-1-4-5-2 şeklinde verilmiş. siz bu sayıları sırasıyla 10-9-8-7-6-5-4-3-2 ile çarpacaksınız. bulduğunuz sonuç kaç ise 11 e kalanlı bölüp kalanı 11 den çıkartacaksınız. bu da sizin d1 değeriniz olacak. bu istenen birinci fonksiyon. sizden beklenen her bir basamaktaki sayıların sayı değerlerini alıp bunlarla işlem yapabilme beceriniz. diğer fonksiyon ise size verilen sayı ve bulduğunuz d1 değerini farklı iki parametre olarak alacak ve verilen değerin sonuna bulduğunuz değeri ekleyip geri döndürecek. burada sıkıntı kalanlı bölme sonucu 1 çıkarsa 11-1=10 olacağı için tek basamak değil 2 basamak eklemeniz gerekeceği. bu da tüm hesaplamayı değiştirecektir.

farklı bir örnek için durumu gerçekleyelim. bize verilen sayı 135426734 olsun. bunu ayırdığınızda 1-3-5-4-2-6-7-3-4 elde edeceksiniz. eğer array kullanımını öğrendiyseniz bunu bir array e atmak ve indexin i olduğunu varsayarsak toplam formülünü 10-i ile çarparak yazmak kolaylık olacaktır.

çarpalım
1x10=10
3x9=27
5x8=40
4x7=28
2x6=12
6x5=30
7x4=28
3x3=9
4x2=8

sonuçları toplarsak 10+27+40+28+12+30+28+9+8=192 oluyor. 192%11 bölmesi yapıldığında sonuç 5 çıkar. 11-5=6 sizin d1 değeriniz olur.

diğer fonksiyona gelecek olursak alacağı iki parametre verilen 135426734 ve bulunan 6 değerini gönderip sonuç olarak 1354267346 döndürecek ve bunu ekrana yazdıracak. bu kadar açıklama yazmak yerine kodu yazmak daha kolaydı herhalde ama siz öğrenmemiş olurdunuz. öğrenme hakkınızı elinizden almak istemedim. başarılar...

Ek olarak;
basamak basamak ayırmak için yine kalanlı bölme kullanabilirsiniz. kullanıcıdan aldığınız değişkeni n ye atadığınızı varsayalım her bir adımda 10 ile kalanlı bölme yapıp kalanı array içine gönderip n den kalanı çıkarıp 10 a bölerseniz sayınız sırayla kısalacaktır. bunu döngü içine alarak kolayca basamaklara ayırabilirsiniz. daha farklı yöntem mutlaka vardır ama ilk aklıma bu geldi. tam tersini de sayıyı geri oluşturmak için kullanabilirsiniz. burada kritik nokta unsigned integer tipinde bir veri kullanmalısınız. integer içine o kadar büyük bir sayıyı koyamayacak olmanız problem olacaktır. 9 basamaklı için problem olmasa da ilk basamak 2 den büyükse 10 basamaklı hale geldiğinde integer veri tipine sığmayacaktır :) işi şansa bırakmadan baştan unsigned şekilde tanımlamak daha mantıklı olacaktır. ödevi veren ben olsam kesin ilk basamağı 7 olan bir sayı denetirdim :) kesin bir de ilk kalanlı bölmeden elde edeceğimiz sayının 1 olmasını denerdim. böylece öğrenci nasıl bir kodlama yapmış görme şansım olurdu.

Linki görmek için izniniz yoktur Giriş yap veya kayıt ol.
adresinden baktım. sanırım unsigned integer da işinizi görmeyecektir :) burdan birini beğenirsiniz. orası size kalmış... biçimlendirdiğim yerler hatalı. yazdım silmek istemedim.
 
Son düzenleme:
Yukarı Alt