C++ Yazılım Problemi

Başlıkta gördüğünüz üzere;
C++ Yazılım Problemi
O zaman doğru cevap vermişim. Ya hocanıza gördüğünüzün C++ değil, C olduğunu öğretin ya da bunu siz öğrenin.
Ben Dev C++ Yazılım Ödevi yazdığınızı ve dev kısmını moderatörün cüce kelimesinin zıttı olarak anlayıp sildiğini düşünmüştüm.
Attığım kodu .cpp uzantısı ile kaydedip düzgün şekilde çalıştırırsanız dediğiniz işi yapacaktır. C için ise daha fazla uğraşmak gerekecek. En az 10 farklı şekilde yapabilirim C'de. Sizin ne kadarını gördüğünüzü de takdir edersiniz ki bilmiyorum.
C kodu atsaydım şunları içerekti. Malloc ile yer alıp integer dizisine sayıları kaydedecektim. Sınıra geldiğinde malloc ile yeni ner alacaktım, sonra o yer ile eski yeri değiştirecektim. Girdi alma kısmı bittikten sonra elimdeki diziyi sıralayıp en küçüğünü ve en büyüğünü size sunacaktım. Sanıyorum ki bunları görmediniz. C kodu atsam da işinize yaramayacaktı yani.
Bu da demek oluyor ki, böyle basit şeyleri hocanın size öğrettiği kısıtlı şeyler ile yapmak gerekiyormuş.
 
Örneğin kullanıcı 5 sayı girdi; 15,25,30,40,50 ardından -1 yazıp programı kapattı. Programın göstermesi gereken en büyük:50 en küçük:15 ama program en küçüğü -1 olarak gösteriyor.

Onun sebebi;
kullanıcıda her sayı istediğinde bir önceki sayıyı tutmuyor olman.
Algoritma şu şekilde olmalı;
-Kullanıcıdan 5 rakam girmesini isteyeceksin.
-5 Rakamı bir değişkene atacaksın.
-Sonra for ile dönüp en büyüğünü ve en kücüğünü bulacaksın.
Bu şekilde olmalı.
Senin şu anki kodun For içinde her döndüğünde aldığı sayıyı biliyor.
Yanlış anlamadıysam.
 
Örneğin kullanıcı 5 sayı girdi; 15,25,30,40,50 ardından -1 yazıp programı kapattı. Programın göstermesi gereken en büyük:50 en küçük:15 ama program en küçüğü -1 olarak gösteriyor.

Onun sebebi;
kullanıcıda her sayı istediğinde bir önceki sayıyı tutmuyor olman.
Algoritma şu şekilde olmalı;
-Kullanıcıdan 5 rakam girmesini isteyeceksin.
-5 Rakamı bir değişkene atacaksın.
-Sonra for ile dönüp en büyüğünü ve en kücüğünü bulacaksın.
Bu şekilde olmalı.
Senin şu anki kodun For içinde her döndüğünde aldığı sayıyı biliyor.
Yanlış anlamadıysam.

İlk başta for döngüsünü kullanma sebebim kullanıcının gireceği sayı sınırsız yani 5 ile sınırlı değil. İnternetteki örneklere birçok kez bakmama rağmen sorunu çözemedim ve gittikçe kafam karışmaya başladı ve yazdığınız algoritmayı da tam olarak anlayamadım. ☹
 
C++:
#include <stdio.h>

int main()
{
    printf("*********************************************\n");
    printf("Kullanici -1 yazana kadar program calisacak.\n");
    printf("*********************************************\n");
  
    int sayi, büyüksayi = 0, kücüksayi = 999999;

        for(int i;; i++)
    {
        printf("%d. sayiyi giriniz:",i+1);
        scanf("%d",&sayi);
    }
        
        if(sayi==-1){
            break;
        }
        else{
            if (sayi > büyüksayi)
        {
            büyüksayi = sayi;
        }
        if (sayi < kücüksayi)
        {
            kücüksayi = sayi;
        }
        }


    printf("Büyük sayi:%d\nKücük sayi is:%d",büyüksayi,kücüksayi);

    return 0;
}

Şöyle bir şey işinize yarayabilir belki hocam. C yada C++ bilmiyorum bu arada saçmalıyorsam kusura bakmayın mantık yürütmeye çalışıyorum.
 
Şu anki kodunuzu düzenleyip çalıştırınca (Örneğin değişkenlerde Türkçe karakterleri düzelttim vs.) -1 sayısını en küçük olarak görüyor. C++ ile yazıyorsanız vektörleri kullanmanızı tavsiye ederim. Dizilerin genişleyebilir halidir vektörler. Bilmediğinizi varsaydığım için kafa karışıklığı olmaması adına "iterator" kullanmadım.

C++:
#include <iostream>
#include <vector>

using namespace std;

int main(){

            cout<<"*************************************************"<<endl;
            cout<<"Kullanici -1 yazana kadar program calisacak."<<endl;
            cout<<"*************************************************"<<endl;

            std::vector<int> V = {};
            int girdi,sayac = 0,kucuk = INT32_MAX,buyuk = 0;
        while(1){

              
                cout<<sayac+1<<". sayiyi giriniz : ";
                cin>>girdi;
              
                if(girdi == -1){

                    break;


                }
              
                V.push_back(girdi); //Vektörümüzün sonuna girdi değişkenini koyar.

                    sayac++;
              



        }
        for(auto i = 0; i < sayac; i++){

          
             if(V[i] < kucuk){

                kucuk = V[i];


            }
            else if(V[i] > buyuk){

                    buyuk = V[i];


            }


        }
        cout<<"En buyuk sayi : "<<buyuk<<", en kucuk sayi ise : "<<kucuk<<endl;


    return 0;
}
 
If döngülerini for döngüsünün içine aldığında çalışması lazım bende çalıştı.
Kod:
#include <stdio.h>

int main()
{
    printf("*********************************************\n");
    printf("Kullanici -1 yazana kadar program calisacak.\n");
    printf("*********************************************\n");
  
    int sayi, büyüksayi = 0, kücüksayi = 999999;

        for(int i;; i++)
    {
        printf("%d. sayiyi giriniz:",i+1);
        scanf("%d",&sayi);
        
        if (sayi > büyüksayi)
        {
            büyüksayi = sayi;
        }
        if (sayi < kücüksayi)
        {
            kücüksayi = sayi;
        }
        if(sayi==-1)
        break;
    }

    printf("Büyük sayi:%d\nKücük sayi is:%d",büyüksayi,kücüksayi);

    return 0;
}
 

Dosya Ekleri

  • ss.PNG
    ss.PNG
    4,8 KB · Görüntüleme: 24
Son düzenleme:
C++:
#include <stdio.h>

int main()
{
    printf("*********************************************\n");
    printf("Kullanici -1 yazana kadar program calisacak.\n");
    printf("*********************************************\n");

    int sayi, büyüksayi = 0, kücüksayi = 999999;

        for(int i;; i++)
    {
        printf("%d. sayiyi giriniz:",i+1);
        scanf("%d",&sayi);
    }
      
        if(sayi==-1){
            break;
        }
        else{
            if (sayi > büyüksayi)
        {
            büyüksayi = sayi;
        }
        if (sayi < kücüksayi)
        {
            kücüksayi = sayi;
        }
        }


    printf("Büyük sayi:%d\nKücük sayi is:%d",büyüksayi,kücüksayi);

    return 0;
}

Şöyle bir şey işinize yarayabilir belki hocam. C yada C++ bilmiyorum bu arada saçmalıyorsam kusura bakmayın mantık yürütmeye çalışıyorum.

Çalıştırmayı denedim fakat şu şekilde hata verdi: [Error] break statement not within loop or switch.

Şu anki kodunuzu düzenleyip çalıştırınca (Örneğin değişkenlerde Türkçe karakterleri düzelttim vs.) -1 sayısını en küçük olarak görüyor. C++ ile yazıyorsanız vektörleri kullanmanızı tavsiye ederim. Dizilerin genişleyebilir halidir vektörler. Bilmediğinizi varsaydığım için kafa karışıklığı olmaması adına "iterator" kullanmadım.

C++:
#include <iostream>
#include <vector>

using namespace std;

int main(){

            cout<<"*************************************************"<<endl;
            cout<<"Kullanici -1 yazana kadar program calisacak."<<endl;
            cout<<"*************************************************"<<endl;

            std::vector<int> V = {};
            int girdi,sayac = 0,kucuk = INT32_MAX,buyuk = 0;
        while(1){

            
                cout<<sayac+1<<". sayiyi giriniz : ";
                cin>>girdi;
            
                if(girdi == -1){

                    break;


                }
            
                V.push_back(girdi); //Vektörümüzün sonuna girdi değişkenini koyar.

                    sayac++;
            



        }
        for(auto i = 0; i < sayac; i++){

        
             if(V[i] < kucuk){

                kucuk = V[i];


            }
            else if(V[i] > buyuk){

                    buyuk = V[i];


            }


        }
        cout<<"En buyuk sayi : "<<buyuk<<", en kucuk sayi ise : "<<kucuk<<endl;


    return 0;
}

Kodu çalıştırmayı denetim fakat fazlasıyla hata verdi:
In function 'int main()':
[Error] in C++98 'V' must be initialized by constructor, not by '{...}'
[Error] 'INT32_MAX' was not declared in this scope
[Error] 'i' does not name a type
[Error] expected ';' before 'i'
[Error] 'i' was not declared in this scope
[Error] 'buyuk' was not declared in this scope
[Error] 'buyuk' was not declared in this scope

If döngülerini for döngüsünün içine aldığında çalışması lazım bende çalıştı.
Kod:
#include <stdio.h>

int main()
{
    printf("*********************************************\n");
    printf("Kullanici -1 yazana kadar program calisacak.\n");
    printf("*********************************************\n");
 
    int sayi, büyüksayi = 0, kücüksayi = 999999;

        for(int i;; i++)
    {
        printf("%d. sayiyi giriniz:",i+1);
        scanf("%d",&sayi);
       
        if (sayi > büyüksayi)
        {
            büyüksayi = sayi;
        }
        if (sayi < kücüksayi)
        {
            kücüksayi = sayi;
        }
        if(sayi==-1)
        break;
    }

    printf("Büyük sayi:%d\nKücük sayi is:%d",büyüksayi,kücüksayi);

    return 0;
}

Programı çalıştırdım -999 yazdığınızda -1'i en küçük olarak görmüyor ama kullanıcı -999 yazmayıp tüm sayıları pozitif yazabilir. Hepsini pozitif yazınca yine -1'i en küçük görüyor.

if ' leri ayri ayri degil; if-else if - else chain i seklinde yazman gerek. Mantik dogru if leri linklememissin.

Bu sefer -1 yazınca program kapanmıyor.
 

Yeni konular

Geri
Yukarı