C'de bir fonksiyondan başka fonksiyonun değişkenine erişme

ÖmerAltıntas

Megapat
Katılım
11 Haziran 2014
Mesajlar
496
Daha fazla  
Cinsiyet
Erkek
Merhaba arkadaşlar, sinema otomasyonu ödevimiz var içinde koltuk bilgileri ve bilet satma fonksiyonları olacak. Bilet sattıktan sonra koltuk bilgileri fonksiyonundaki koltuk sayısında satılan bilet kadar azalma olacak. Global değişken kullanmamız yasak. Nasıl çözebilirim?
 
Parametre olarak al, gönder.

Düzgün struct tanımlanıp main'de struct tipinde değişken oluşturup onu sağa sola gönderirdim ben olsam.
"It receives the required number of tickets and available seat for the required ticket level as a parameter. It updates and returns the updated available seat to the calling function if there are enough seats and outputs the bill. It outputs a message if the seats cannot be sold." Fonksiyon açıklaması bu şekilde. Fakat koltuk sayısını nasıl return edeceğimi anlayamadım.
 
Artı -2 Eksi
Chat GPT'den yardım aldım, aşağıdaki gibi deneyebilirsin.

C:
#include <stdio.h>

int sell_tickets(int num_tickets_requested, char* ticket_level, int num_seats_available) {
    // İstenilen bilet seviyesine göre bilet fiyatını belirle
    int ticket_price = get_ticket_price(ticket_level);
    // İstenilen bilet sayısı kadar bilet satın alınırsa toplam tutarı hesapla
    int total_cost = num_tickets_requested * ticket_price;
    // Eğer yeterli koltuk yoksa, mesaj çıkart ve geriye 0 döndür
    if (num_seats_available < num_tickets_requested) {
        printf("Yeterli koltuk yok.\n");
        return 0;
    }
    // Eğer yeterli koltuk varsa, faturayı çıkart ve güncellenmiş koltuk sayısını döndür
    else {
        num_seats_available -= num_tickets_requested;
        printf("Toplam tutar: %d\n", total_cost);
        return num_seats_available;
    }
}
C:
int num_seats_remaining = sell_tickets(3, "orta", 10);
 
Artı -2 Eksi
"Global değişken" kullanarak sorununuzu çözebilirsiniz. Bir örneği alta bırakıyorum, siz detaylıca araştırabilirsiniz.

Düzenleme: Global değişken kullanımı yasakmış yeni gördüm :) tek seçeneğiniz fonksiyona parametre olarak alıp return ile geri göndermek.
 
Artı -1 Eksi
Ödevin tamamını paylaşmadığınız sürece olayı güzelce anlamam zor. Siz, hocanız veya buradakiler (ki ChatGPT kullanıldığına göre, hiç sanmıyorum) ödevin paylaştığınız kısmından bir şeyler anlıyor olabilir ama ben anlamıyorum.

Daha sinemanın nasıl çalıştığı bille belli değil. En basitinden 1D, 2D hatta 3D array bile kullanılabilir. Kaldı ki bunlara alternatif daha kullanışlı şeyler de mevcut.

Bir değişkene 2 farklı yerden erişmek istiyorsanız parametre olarak verip istediğiniz yerden istediğiniz yere çağırırsınız. C ödevi olduğuna göre main'de tanımlar, gereken fonksiyonlara parametre olarak verip durursunuz. Bu kadar genel bir soruya bu kadar genel bir cevap. Anlamadığı tek yer bu olan birine fazlasıyla yetecek bir cevap. Öyle değilse ödevde anlamadığınız başka yerler de vardır.
 
Ödevin tamamını paylaşmadığınız sürece olayı güzelce anlamam zor. Siz, hocanız veya buradakiler (ki ChatGPT kullanıldığına göre, hiç sanmıyorum) ödevin paylaştığınız kısmından bir şeyler anlıyor olabilir ama ben anlamıyorum.

Daha sinemanın nasıl çalıştığı bille belli değil. En basitinden 1D, 2D hatta 3D array bile kullanılabilir. Kaldı ki bunlara alternatif daha kullanışlı şeyler de mevcut.

Bir değişkene 2 farklı yerden erişmek istiyorsanız parametre olarak verip istediğiniz yerden istediğiniz yere çağırırsınız. C ödevi olduğuna göre main'de tanımlar, gereken fonksiyonlara parametre olarak verip durursunuz. Bu kadar genel bir soruya bu kadar genel bir cevap. Anlamadığı tek yer bu olan birine fazlasıyla yetecek bir cevap. Öyle değilse ödevde anlamadığınız başka yerler de vardır.
Uzun olduğu için paylaşmadım sadece aklıma takılan yeri halledebilirsem gerisini yaparım diye düşündüm. Ödev bu şekilde.
 

Dosya Ekleri

  • 1.JPG
    1.JPG
    150,2 KB · Görüntüleme: 46
  • 2.JPG
    2.JPG
    73,3 KB · Görüntüleme: 46
  • 3.JPG
    3.JPG
    66,4 KB · Görüntüleme: 41
Uzun olduğu için paylaşmadım sadece aklıma takılan yeri halledebilirsem gerisini yaparım diye düşündüm. Ödev bu şekilde.
@Vavien. 'e katılıyorum. Düzgün bir structure ayarladıktan sonra parametre olarak sağa sola göndermek mantıklı. Eğer illa sabit bir şey olsun diyorsan global olarak değişken de tanımlayabilirsin. Yalnız parametre olarak aldığın şeylerde yaptığın değişikliklerin geçerli olabilmesi için pointer olarak alman gerekiyor parametreleri. Değişiklik yapmadığın müddetçe parametreleri pointer yapmana gerek yok.

Ek olarak paylaşılan dökümanda fonksiyonların veri alıp almadığından zaten bahsetmiş hocan. seatControl fonksiyonu 2 parametre alıyormuş seatInfo ve numberOfSold, eğer stok varsa 1 yoksa 0 döndürecekmiş mesela. updatePrices()'da parametre olarak mevcut fiyatları alıyormuş ve kullanıcıdan aldığı input bilgisiyle fiyatı güncelliyormuş gibi gibi bir çok info vermiş.

En güzel yöntem struct kullanmak. Muhtemelen daha iyi yazılabilir ancak aşağıya basit bir örnek bırakayım. Get fonksiyonu ve set fonksiyonu yazılır vs vs. Ancak en güzel yöntem iyi yazılmış bir struct.
C:
struct LevelInformation {
    int price;
    int seatCount;
};

typedef struct LevelInformation Levels;

struct ConcertTicketInformation {
    Levels lvA, lvB, lvC, lvD;
};

typedef struct ConcertTicketInformation Ticket;

Levels set_level(int Price, int SeatCount) {
    Levels newLevel = {
        Price,
        SeatCount
    };
    return newLevel;
}

Ticket initial_information() {
    Ticket newTicket = {
        set_level(100, 40),
        set_level(80, 40),
        set_level(60, 40),
        set_level(40, 40)
    };
    return newTicket;
}
 
@Vavien. 'e katılıyorum. Düzgün bir structure ayarladıktan sonra parametre olarak sağa sola göndermek mantıklı. Eğer illa sabit bir şey olsun diyorsan global olarak değişken de tanımlayabilirsin. Yalnız parametre olarak aldığın şeylerde yaptığın değişikliklerin geçerli olabilmesi için pointer olarak alman gerekiyor parametreleri. Değişiklik yapmadığın müddetçe parametreleri pointer yapmana gerek yok.

Ek olarak paylaşılan dökümanda fonksiyonların veri alıp almadığından zaten bahsetmiş hocan. seatControl fonksiyonu 2 parametre alıyormuş seatInfo ve numberOfSold, eğer stok varsa 1 yoksa 0 döndürecekmiş mesela. updatePrices()'da parametre olarak mevcut fiyatları alıyormuş ve kullanıcıdan aldığı input bilgisiyle fiyatı güncelliyormuş gibi gibi bir çok info vermiş.

En güzel yöntem struct kullanmak. Muhtemelen daha iyi yazılabilir ancak aşağıya basit bir örnek bırakayım. Get fonksiyonu ve set fonksiyonu yazılır vs vs. Ancak en güzel yöntem iyi yazılmış bir struct.
C:
struct LevelInformation {
    int price;
    int seatCount;
};

typedef struct LevelInformation Levels;

struct ConcertTicketInformation {
    Levels lvA, lvB, lvC, lvD;
};

typedef struct ConcertTicketInformation Ticket;

Levels set_level(int Price, int SeatCount) {
    Levels newLevel = {
        Price,
        SeatCount
    };
    return newLevel;
}

Ticket initial_information() {
    Ticket newTicket = {
        set_level(100, 40),
        set_level(80, 40),
        set_level(60, 40),
        set_level(40, 40)
    };
    return newTicket;
}
Kod için teşekkürler. Yalnız şöyle bir şey var sadece fonksiyonlara kadar öğrendik yani pointer, array veya struct kullanırsak problem olacağını düşünüyorum.
 
Kod için teşekkürler. Yalnız şöyle bir şey var sadece fonksiyonlara kadar öğrendik yani pointer, array veya struct kullanırsak problem olacağını düşünüyorum.
O zaman parametre olarak değil returnlerle yapacaksın. O da yapılabilir ama kulağı tersten tutmaya çalışmaya benziyor.
 

Technopat Haberler

Yeni konular

Geri
Yukarı