[çözüldü] while loop sorunu

Başlatan reflection, 28 Ekim 2011 - 14:36:20

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

reflection

Within the MAIN function:
A "while" loop will keep reading three positive integers from the standard input as long as the loop condition (INTEGER1 > 0 and INTEGER2 > 0 and INTEGER3 > 0) holds true.

tasarlamam gereken sistemde böyle bir koşul yazmam gerekiyor fakat bu koşulu while ile yazmayı bir türlü beceremedim. do-while ile ve if  ile yazabiliyorum fakat onlar işime yaramıyor malesef. 

bu konuda bilgisi olan veya nasıl bir mantık izlemem gerektiğini söyleyecek birisi varsa çok iyi olur. teşekkürler

alquirel

Aynen dediğini yapacaksınız :)

While'ın parantezine bu mantıksal ifadeyi yazacaksınız, o da "true" olduğu sürece döngüyü devam ettirecek.

Yani

do {
scanf ( " %d %d %d", &sayi1, &sayi2, &sayi3 );
} while ( sayi1 > 0 && sayi2 > 0 && sayi3 > 0 );


reflection

teşekkürler cevap için.
programın devamında while içinden çıkmadan bu okunan 3 sayının üçgen oluşturup oluşturmadığı, oluşturuyor ise nasıl bir üçgen oluşturduğunu da yazmam gerektiğinden do-while döngüsünü kullanamıyorum çünkü kullanırsam sayılar negatif te olsa koşul döngünün sonunda olduğundan negatif sayılara üçgen oluşturup oluşturmama testi uygulanmış olucak mesela -2 -2 -1 değerleri girildiğinde while loop u sona ulaşıp hata vermeden önce ikizkenar üçgen olduğu çıktısı gözükmüş olacak.

programın geneli aşağıdaki gibi olması gerekiyor.

A "while" loop will keep reading three positive integers from the standard input as long as the loop condition (INTEGER1 > 0 and INTEGER2 > 0 and INTEGER3 > 0) holds true. Assume that three integers will represent the side lengths of a triangle.

Within the "while" loop:Three side lengths will be tested if they form a triangle. If the test is successful,       

    It will print "That is an EQUILATERAL triangle" if three sides have equal lengths.
    It will print "That is an ISOSCELES triangle" if any two sides are equal.
    It will print "That is a SCALENE triangle" if all sides have different lengths.
    Otherwise, it will print "That is not a TRIANGLE".


programın ilk kısmında negatif pozitif kontrolü yapıp negatif sayı varsa yanlış değer girdiniz hatası verecek

programın ikinci kısmında elimizdeki pozitif değerlere üçgen oluşturma testi if(a+b>c && a+c>b && b+c>a) uygulanacak testi geçemez ise sayılar üçgen oluşturmaz çıktısı vericek

testi geçer ise de
programın son kısmınında üçgen çeşidi belirlenecek.

         if(x==y && y==z)   
            printf("That is an EQUILATERAL triangle");
         else if(x==y || y==z || x==z)   
            printf("That is an ISOSCELES triangle");
         else   
            printf("That is a SCALENE triangle");

diye düşündüm fakat dediğim gibi girişinde ki while loop unu "do" olmadan programa entegre edemedim bir türlü


alquirel

O halde şöyle yapın:


while(1){
  scanf( "üç sayı" );
  if( "herhangi biri negatifse" ) break;
  "üçgen mi? nasıl?"
  "sonuç yaz"
}


Döngülerde break ve continue ile kontrolü sağlayabilirsiniz.

reflection

#4
malesef girilen değerleri while döngüsünde okumam gerekiyor programı yazarken.


#include <stdio.h>
int main()
{
int x,y,z;
do
{printf("enter the length of sides: \n");
scanf ( " %d %d %d", &x, &y, &z );
if(x<0 || y<0 || z<0) {
printf("lenght cannot be a negative value.\n");
}
else {

if( üçgen oluşturma koşulları)
{
if(x==y && y==z)
printf("That is an EQUILATERAL triangle");
else if(x==y || y==z || x==z)
printf("That is an ISOSCELES triangle");
else
printf("That is a SCALENE triangle");
}
}
} while ( x > 0 && y > 0 && z > 0 );
return 0;
}


şöyle bir şey yazsam mantıksal bir sorun ile karşılaşırmıyım?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 28 Ekim 2011 - 16:03:19

bu şekilde yazdığım program düzgün çalışıyor gibi duruyor şimdiik  yardımınız için teşekkürler @alquirel

#include <stdio.h>
int main()
{
int x,y,z;
   do
   {
      printf("\nenter the length of sides: \n");
      scanf ( " %d %d %d", &x, &y, &z );
         if(x<0 || y<0 || z<0)
            {
            printf("lenght cannot be a negative value.\n");
            }
         else
         {
            if(x+y>z && x+z>y && x+z>y)
            {
               if(x==y && y==z)   
                  printf("That is an EQUILATERAL triangle\n");
               else if(x==y || y==z || x==z)
                  printf("That is an ISOSCELES triangle\n");
               else
                  printf("That is a SCALENE triangle\n");      
            }
            else
            {
               printf("The numbers you entered does not create a triangle\n");
            }
         }
   } while ( x > 0 && y > 0 && z > 0 );
   return 0;
}


alquirel

En güzel şey, deneyerek görmek :)

Bu kodunuzun çalışacağını düşünüyorum.

Ancak; benim yazdığımda da sayılar while döngüsü içinde okunur. while parantezine 1 yazdığınızda sonsuz döngüye girer normalde, bunu da
if(x<0||y<0||z<0){
printf("hatalı");
break;
}

gibi bir kod parçasıya bu döngüyü kırabilirsiniz.

Ve while(1) ile döngüye girmek do while kullanma zorunluluğunuzu giderir.



Ben cevap yazarken siz cevabı bulmuşsunuz. Rica ederim...