Şimdi Ara

do while hiç anlamadığım bi şekilde sonsuz döngüye giriyor

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
7
Cevap
0
Favori
809
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar yaklaşık 10 denemeden 1 inde sonsuz döngüye giriyor sebebini bulabilcek var mı?


    #include "stdafx.h"
    #include <iostream>
    #include <ctime>
    using namespace std;
    void create() {
    srand((unsigned)time(0));
    int seq[3][3],dizi[9],var,cou=0;
    dizi[0]= rand() % 10;
    dizi[1] = dizi[0];
    bool result=false;
    for(int i=2;i<9;i++) { //randomly appoint numbers inside array
    do {
    do {
    var = rand() % 10;
    cou=0;
    for(int c=0;c<9;c++) {
    if(dizi[c]==var) {
    cou++;
    }
    }
    }while(cou!=0);
    dizi= var;
    }while(dizi==NULL);
    }

    for(int i=0;i<3;i++) {
    for(int x=0;x<3;x++) {
    do {
    result=false;
    var = rand() % 9;
    if(dizi[var]!=NULL) {
    seq[x] = dizi[var];
    dizi[var]=NULL;
    result=true;
    }
    }while(result==false);

    }
    }

    for(int i=0;i<3;i++) {
    for(int x=0;x<3;x++) {
    cout << seq[x] << "|";

    }
    cout << endl ;
    }


    }
    int main()
    {

    create();
    system("pause");
    return 0;
    }



    < Bu mesaj bu kişi tarafından değiştirildi BeMasterinCpp -- 20 Mart 2013; 1:36:13 >







  • quote:

    Orijinalden alıntı: BeMasterinCpp

    Arkadaşlar yaklaşık 10 denemeden 1 inde sonsuz döngüye giriyor sebebini bulabilcek var mı?

    for(int i=0;i<3;i++) {
    for(int x=0;x<3;x++) {
    do {
    result=false;
    var = rand() % 9;
    if(dizi[var]!=NULL) {
    seq[x] = dizi[var];
    dizi[var]=NULL;
    result=true;
    }
    }while(result==false);

    }
    }



    Dizi[var] eğer null değil ise onu null yapıyorsun.
    Yani döngü içinde hepsinin null olma ihtimali var.
  • iyide o yüzden sonsuz döngüye girmez ki ordaki if döngüsüne girdiğinde sonuçta eninde sonunda result=true olarak çıkıyor döngüden acaba derleyici den felan mı kaynaklanıyor normal visual in express 2010 unu kullanıyorum
  • if e her girdiğinde dizi nin bir elemanı sıfırlanıyor. Bütün elemanlar sıfırlandığında artık if e girmeyecek, result hep false olacak ve sonsuz döngü oluşacak.

    Ayrıca 0 yerine devamlı NULL kullanmışsın bu yanlış. NULL sadece pointer larda kullanılır ve hiçbiryeri göstermeyen "null pointer" anlamına gelir. Yani koşullar şu şekilde olmalı. if(dizi[var] != 0) ya da sadece if(dizi[var]).

    Aynı şekilde bool değişkenlerde direkt olarak yazılır genelde.
    while(result) // true ise.
    while(!result) // false ise.
  • evet if döngüsüne her seferinde girdiğinde null atanıyor ama o döngüye bi işlem yapmıyor sadece o elemanı kontrol olarak kullanıyor null mu değil mi diye


    neyse kalsın orasıda.bir dizideki 9 elemanı 3x3 lük matrise rastgele olarak farklı bi yoldan atayacak var mı?
  • quote:

    Orijinalden alıntı: BeMasterinCpp

    Senin yoluna pek bakası gelmiyor insanın, biraz düzenli yazarsan daha rahat okuruz.

    #include <stdio.h> 
    #include <stdlib.h>

    int main()
    {
    srand(time(NULL));

    int dizi[9]={1,2,3,4,5,6,7,8,9};
    int matris[3][3]={0};
    int i,j,kordinat,n;

    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    kordinat=rand()%9;

    while(dizi[kordinat]==-1)
    {
    kordinat=rand()%9;
    }
    matris[i][j]=dizi[kordinat];
    dizi[kordinat]=-1;
    }
    }
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    printf("%d ",matris[i][j]);
    }
    printf("\n");
    }

    system("PAUSE");
    return 0;
    }




  • yalnız bi elemandan 2 tane olucak ve aynı senin algoritmayla benim algoritma :).gerisi normal örneğin. 2,3,4,5,6,2,7,8,9

    neyse o kadarda önemli değil mantık aynı zaten



    < Bu mesaj bu kişi tarafından değiştirildi BeMasterinCpp -- 22 Mart 2013; 0:14:20 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.