Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C de Polinom İfadesi


crackedboy86

Öne çıkan mesajlar

Arkadaşlar merhaba, C de polinom işlemlerini yapan bir program hazırlıyorum. Şurada takıldım yardımınıza ihtiyacım var. Şimdi kullanıcı polinom ifadesini sadece katsayı ve üs şeklinde değil, uzun olarak tam string giriyor. Mesela şöyle: -x^3 -6x^2 + 4x + 22. Ben bu ifadeyi alıp bir işlemden geçirerek içindeki fazla boşlukları temizliyor ve şu hale getiriyorum. -x^3-6x^2+4x+22. Daha sonra ifadeyi biraz parçalamak istedim. Amacım önce -x^3, sonra -6x^2, sonra 4x gibi elde etmek. Fakat benim yazdığım koda göre doğal olarak + ve - işaretlerine göre parçalanma yapıyor sonuçlar ise işaret kaygısı olmadan x^3, 6x^2 şekline geliyor. Benim mantığa göre ifade nasıl parçalanır ? Veya amacıma daha uygun nasıl elde edebilirim katsayı ve üsleri işaretleri (+,-) dikkate alarak. Yardımlarınız için şimdiden teşekkür ederim. Parçalama yapan kodum şu: dst değişkeni polinom ifadesi içeren string.

char *pch = strtok (dst," +-" ); // Delimiters

while (pch != NULL)
{
printf (" %s",pch );
pch = strtok (NULL, " +-" );
}

Polinom => 2x^4 + 5x^3 -2x^ -4

Ekran çıktısı => 2x^4 5x^3 2x^ 4
Link to comment
Sosyal ağlarda paylaş

Pardon soruyu yanlis anlamisim.. Ama asagidaki, ileride karsilasacagin bir sorun..

Simdi ki cozumun basit. Her ifadede - olmasi aslinda iki ifade arasinda + olmasindan kaynaklanir. Yani sen -'lerin hepsini +-'lerle replace edersen, daha sonra bolerken de +'lara gore bolersen, sorunun cozulecektir.

Matematikte parantezlerin +-'ye gore ustunlugu vardir. Insanlar ust olarak (4+2) yazarsa ve sen +'lara gore bolersen yanlis olur.
Yapman gereken isaretlere gore ayirmak. Bu konuya precedence denir.
http://en.wikipedia.org/wiki/Order_of_operations#Programming_languages
Senin ihtiyacin olan 1, 3, 4 ve 14
Expression'lari bunlara gore grupla, tercihen recursive olarak.

Ayrica daha once yapilan uygulamalarin ust ve carpan almalarinin bir nedeni var.. Senin de gruplaman bence ilk olarak ust ve carpanlarina gore olmali.
Link to comment
Sosyal ağlarda paylaş

Arkadaşlar tavsiyeleriniz sayesinde bir basamak daha çıkabildim. Şimdi girilen ifade terimlerine ayrılmış olarak elde edilebiliyor. Yani ifade 2x^4 + 5x^3 -2x^ -4 ise çıktı olarak her birim terim şu şekilde gözüküyor. 2x^4 5x^3 -2x^ -4. Şimdi, riglous usta ben bu her terim için katsayı ve üslere nasıl ulaşacam string içindeler hala. Aynı zamanda mesela katsayı 1 için adam direk 1x değilde x giriyor veya en sona direk 4 rakamını yazıp bitiriyor gibi. Biraz daha akıl vermen mümkün müdür? Ben buradaki üs ve katsayıları tek tek alıp bir linked list içinde tutacam, tabii önce bu + lara göre parçaladığımız ifadedeki sayılara ulaşmam lazım. Yardımlarını bekliyorum, teşekkürler, saygılar
Link to comment
Sosyal ağlarda paylaş

Bir gramer yazıp ona göre parse edebilirsin. Mesela:

A : B | C^ | C^N
B : N | -N
C : D | -D
D : x | Nx
N : [0-9] | [0-9]N

İlk önce string içinde x var mı diye bakarak başlayabilirsin. X yoksa sabittir (B), varsa C^ ya da C^N. Sonra C'nin başında - var mı diye bakarsın. Sonra x'ten önce rakam var mı diye bakarsın vs.
Link to comment
Sosyal ağlarda paylaş

Oldu... prolog dersi de ver istersen adam daha baslamadan CS'i biraksin :)

Terimlere tek tek bak. Sen neyin exponent, neyin coefficient oldugunu nasil anliyorsun? Yani sana birisi boyle bir text verse, nelere dikkat ederek anliyorsun?


once biraz dusun, cevabi bulamazsan bakarsin

x varsa, onundeki sayiyi aliyorsun; tum string'in basindan, x'in oldugu noktaya kadar.
Exponent oldugunu nasil anliyorsun? ^ karakteri var mi diye bakiyorsun, varsa o karakterden, tum string'in sonuna kadar ne var ne yoksa aliyorsun.

Link to comment
Sosyal ağlarda paylaş

  • 2 hafta sonra ...
Ustalar merhabalar, yardımlarınız için çok teşekkür ederim. Vize haftası olduğu için bir süre bakamadım polinom projesine. Şu ana kadar polinom toplama, çıkarma, çarpma, evaluate vs. yaptım onları. Son olarak Polinom fonksiyonu için grafik çizme işi kaldı. X için değer aralığı ve ifade veriliyor, ben ifade ve X aralığına göre Y leri hesaplatıyorum. Buraya kadar tamam. Şimdi ekrana çizmek için iki boyutlu bir array kullanıyorum. İki boyutlu diziyi iç içe iki for döngüsüyle gezerken o "kutucuğa * karakteri basmalı mıyım basmamalı mıyım?" kısmında takıldım, kontrolü sağlayamadım. Array [25][80] şeklinde, gelen fonksiyonda örnek olarak şu olsun: 0.004x^3 + 0.04x^2 - 1.5x - 4.3. X için aralık şu: -30 __ +30
Link to comment
Sosyal ağlarda paylaş

tam anlamadım dediğini, en bodoslama şekliye şöyle grafik çizdirebilirsin :

polinomun x'in verilen değer aralığında değerlerini alırsın, mesela -30'dan 1 arttıra arttıra 30'a kadar. ne kadar sık olursa o kadar detaylı olur

ardından bu değerlerin max/minini belirle, grafiği satır satır çizeceğimiz için (klasik printf vsden başka bir yöntem yoksa) üstten başlayacağız, ihtiyacımız var.

grafiği büyüklüğüne bağlı bir for döngüsü, en uğraştırmayan şekliyle en büyük ve küçük değer arası ne kadar sayı olduğuna bağlı miktarda (100 -200 arası çıkıyorsa 300 veya orantılı miktarda yani) döndürürsün.

tabi ondan önce her döngünün hangi sayı aralığını kapsadığını da belirlemen lazım, en düşük sayıyı 0'a itecek şekilde belirle (üstteki örneğe göre 300,0 olsun yani), ardından misal 150 döngü olsun dediysen, k. döngü için (150-(k-1))*2>sayi>=(150-k)*2 aralığındaki tüm sayıları göze alabilirsin örnek olarak.

son olarak döngü dönerken de sırayla x'leri tarayacak, x'in değeri istenen sayı aralığındaysa bir nokta, değilse boşluk bırak şeklinde ilerlet. tabi boşluk ve nokta aynı miktarda mı yer kaplıyor o kadarını bilmiyorum.

x=0 ve döngü tam y=0 a denk geliyorken de |, -- vs ile de eksen çizgilerini çizdirtebilirsin gerekiyorsa


. .
. .
. .
. .
.


gibi bişeyler olur yani -4,4 aralığı için |x| grafiği
Link to comment
Sosyal ağlarda paylaş

Yapmak istedigini tam olarak anlatirsan yardimci olabiliriz tabii ki ama "bana odev lazim" diye bir mesaja pek cevap veremiyoruz. Nasil olacak program, basta bunu anlatman lazim. Ilk bakista benim aklima gelen, "listeyi topla() diye bir fonksiyona veriyorsun, sana sonucunu donduruyor" gibi bir program.

Bir de dedigim gibi, spesifik sorular sorarsan daha yararli olur senin icin. Ha bir de, biz odev yapmiyoruz. De ki odev yaptirmak gerekti, o zaman da "bana su lazim" demen bir sey ifade etmiyor; projelendirilmis taslagini buraya koymadan kimse bir sey yapamaz. Son olarak da okul ve ders belirtirsen sevinirim.

Dusunmeye baslaman icin bir nokta vermek lazim. Tahminim, her bir node tek bir ifadeyi temsil edecek.
Buna gore her bir node'un ozellikleri ne olabilir sence?

katsayi, ust bilgisi

Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...