Neler Yeni

C programlama

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
Bu soruyla ilgili bu kodu yazdım fakat eksik şu array1 in yerlerini değiştirmemesi lazım ama değiştiriyor array2 gibi başka bir diziye atayıp yaptım aşağıdaki kodda burda da sorudaki adres mantığına uygun bu konuda yardımcı olurmusunuz array1 dizisini pointer üzerinden sıralıyım ama array1 in yerleri değişmesin ????


#include<stdio.h>
#include<stdlib.h>
#define size 5
int main()
{
int array1[size],array2[size];
int temp;
int* ptr;
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf_s("%d", &array1);
array2 = array1;
}
ptr = array2;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - i; j++)
{
if (*(ptr + j) > * (ptr + j + 1))
{
temp = (ptr + j);
(ptr + j) = (ptr + j + 1);
(ptr + j + 1) = temp;
}
}
}
printf("array1 : ");
for (int i = 0; i < size; i++)
{
printf("%d ", array1);
}

printf("\n");
printf("\npointer degiskeni ile siralanmis hali:\n");
for (int i = 0; i < size; i++)
{
printf("adres : %p -------- ", ptr);
printf("deger : %d \n", *ptr);
ptr++;
}

system("pause");
return 0;
}
 

Ekler

  • page1_1.jpg
    page1_1.jpg
    874.6 KB · Hit: 72

vpro

80+
Katılım
21 Nisan 2020
Mesajlar
229
Dahası  
Reaksiyon skoru
133
İsim
omer
Hocam tam anlamadım problemi ama. Aray 2 ve array 1 i niye birbirine eşitlediniz ? array2 de yapılan değişiklik array 1 i bozar ?
Biraz daha açarsanız yardımcı olabilirim.
 

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
  • Konu Sahibi Konu Sahibi
  • #3
Hocam tam anlamadım problemi ama. Aray 2 ve array 1 i niye birbirine eşitlediniz ? array2 de yapılan değişiklik array 1 i bozar ?
Biraz daha açarsanız yardımcı olabilirim.

array1 in yerlerinin değişmemesi lazım onun için array1 array2 e eşitleyip sonra ptr = array2 yaptım boylece array1 in yerleri değişmedi fakat dediğiniz gibi adresler değişti sorunum bu adreslerin ve array1 in değişmemesini istiyorum sadece ptr üzerinden sıralansın

adresler üzerinden yapılsa sorun kalmicak ama onu yapamadım
 

vpro

80+
Katılım
21 Nisan 2020
Mesajlar
229
Dahası  
Reaksiyon skoru
133
İsim
omer
Hocam arraylerde içerik kopyalamak istiyorsanız memcpy fonsiyonunu kullanın. Böylece 2 array ayrı adreslerde kalacak 1 inde yaptığınız değişiklik 2. yi etkilemeyecek.
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf_s("%d", &array1);
array2 = array1;
}


Bu ksım sayıları doğru alıyor mu ?
 

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
  • Konu Sahibi Konu Sahibi
  • #5
Hocam arraylerde içerik kopyalamak istiyorsanız memcpy fonsiyonunu kullanın. Böylece 2 array ayrı adreslerde kalacak 1 inde yaptığınız değişiklik 2. yi etkilemeyecek.
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf_s("%d", &array1);
array2 = array1;
}


Bu ksım sayıları doğru alıyor mu ?
hocam sayıları doğru alıyor kodun çalışma yonunden eksiği yok tek sıkınntı dediğim gibi soruya tam uyarlanamadı soruya uyarlanması lazım sizin dediğiniz fonksiyonu kullanamam odev olarak veridği için hocamız ekstra bir şey (kendisinin öğretmedi bir şey) olunca 0 veriyor
 

vpro

80+
Katılım
21 Nisan 2020
Mesajlar
229
Dahası  
Reaksiyon skoru
133
İsim
omer
for (int i = 0; i < size; i++)
{
*(array2 +i) = *(array1 + i) ;
}
Yapın
array2 = array1; bunu kullanmayın?
 

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
  • Konu Sahibi Konu Sahibi
  • #7
for (int i = 0; i < size; i++)
{
*(array2 +i) = *(array1 + i) ;
}
Yapın
array2 = array1; bunu kullanmayın?



Dostum kodu düzenledim ama bu şekilde array1 değişiyor array1 in değişmesini istemiyorum bu nasıl sağlanır ???

örneğin array1 = 5,9,6,4,1,2,0 iken ptr 0,1,2,4,5,6,9 diye sıralanır burada aynı şekilde array1 de = 0,1,2,4,5,6,9 boyle sıralanır ama array1 in 5,9,6,4,1,2,0 bu şekilde kalması lazım


#include<stdio.h>
#include<stdlib.h>
#define size 5
int main()
{
int array1[size],array2[size];
int temp;
int* ptr;
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf_s("%d", &array1);

}
ptr = array1;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - i; j++)
{
if (*(ptr + j) > * (ptr + j + 1))
{
temp = *(ptr + j);
*(ptr + j) = *(ptr + j + 1);
*(ptr + j + 1) = temp;
}
}
}
printf("array1 : ");
for (int i = 0; i < size; i++)
{
printf("%d ", array1);
}

printf("\n");
printf("\npointer degiskeni ile siralanmis hali:\n");
for (int i = 0; i < size; i++)
{
printf("adres : %p -------- ", ptr);
printf("deger : %d \n", *ptr);
ptr++;
}

system("pause");
return 0;
}
 

vpro

80+
Katılım
21 Nisan 2020
Mesajlar
229
Dahası  
Reaksiyon skoru
133
İsim
omer
ptr = array2 olarak kalacak hocam yine array1 olmayacak.
#include<stdio.h>
#include<stdlib.h>
#define size 5
int main()
{
int array1[size],array2[size];
int temp;
int* ptr;
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf_s("%d", &array1);

}
for (int i = 0; i < size; i++)
{
*(array2 +i) = *(array1 + i) ;
}
ptr = array2;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - i; j++)
{
if (*(ptr + j) > * (ptr + j + 1))
{
temp = *(ptr + j);
*(ptr + j) = *(ptr + j + 1);
*(ptr + j + 1) = temp;
}
}
}
printf("array1 : ");
for (int i = 0; i < size; i++)
{
printf("%d ", array1);
}

printf("\n");
printf("\npointer degiskeni ile siralanmis hali:\n");
for (int i = 0; i < size; i++)
{
printf("adres : %p -------- ", ptr);
printf("deger : %d \n", *ptr);
ptr++;
}

system("pause");
return 0;
}
 

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
  • Konu Sahibi Konu Sahibi
  • #9
ptr = array2 olarak kalacak hocam yine array1 olmayacak.
#include<stdio.h>
#include<stdlib.h>
#define size 5
int main()
{
int array1[size],array2[size];
int temp;
int* ptr;
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf_s("%d", &array1);

}
for (int i = 0; i < size; i++)
{
*(array2 +i) = *(array1 + i) ;
}
ptr = array2;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - i; j++)
{
if (*(ptr + j) > * (ptr + j + 1))
{
temp = *(ptr + j);
*(ptr + j) = *(ptr + j + 1);
*(ptr + j + 1) = temp;
}
}
}
printf("array1 : ");
for (int i = 0; i < size; i++)
{
printf("%d ", array1);
}

printf("\n");
printf("\npointer degiskeni ile siralanmis hali:\n");
for (int i = 0; i < size; i++)
{
printf("adres : %p -------- ", ptr);
printf("deger : %d \n", *ptr);
ptr++;
}

system("pause");
return 0;
}


yazdığınız kodu denenedim ve mantıklı geldi ama saçma değerler basıyor düzelmedi orası
 

vpro

80+
Katılım
21 Nisan 2020
Mesajlar
229
Dahası  
Reaksiyon skoru
133
İsim
omer
Yeni bakabildim hocam :) Dev C++ kurdurdunuz bana :D
Burda array1 in içeriği korunuyor bu muydu problem ?

#include<stdio.h>
#include<stdlib.h>
#define size 5
int main()
{
int array1[size],array2[size];
int temp;
int* ptr;
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf("%d", array1 + i );
}
for (int i = 0; i < size; i++)
{
*(array2 +i) = *(array1 + i) ;
}
ptr = array2;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - i; j++)
{
if (*(ptr + j) > * (ptr + j + 1))
{
temp = *(ptr + j);
*(ptr + j) = *(ptr + j + 1);
*(ptr + j + 1) = temp;
}
}
}
printf("\narray1 icerigi: \n");
for (int i = 0; i < size; i++)
{
printf("%d ", *(array1 + i));
}

printf("\n\n");
printf("\npointer degiskeni ile siralanmis hali:\n");
for (int i = 0; i < size; i++)
{
printf("adres : %p -------- ", ptr);
printf("deger : %d \n", *ptr);
ptr++;
}

system("pause");
return 0;
}
 

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
Yeni bakabildim hocam :) Dev C++ kurdurdunuz bana :D
Burda array1 in içeriği korunuyor bu muydu problem ?

#include<stdio.h>
#include<stdlib.h>
#define size 5
int main()
{
int array1[size],array2[size];
int temp;
int* ptr;
for (int i = 0; i < size; i++)
{
printf("%d. degeri giriniz: ", i);
scanf("%d", array1 + i );
}
for (int i = 0; i < size; i++)
{
*(array2 +i) = *(array1 + i) ;
}
ptr = array2;
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size - i; j++)
{
if (*(ptr + j) > * (ptr + j + 1))
{
temp = *(ptr + j);
*(ptr + j) = *(ptr + j + 1);
*(ptr + j + 1) = temp;
}
}
}
printf("\narray1 icerigi: \n");
for (int i = 0; i < size; i++)
{
printf("%d ", *(array1 + i));
}

printf("\n\n");
printf("\npointer degiskeni ile siralanmis hali:\n");
for (int i = 0; i < size; i++)
{
printf("adres : %p -------- ", ptr);
printf("deger : %d \n", *ptr);
ptr++;
}

system("pause");
return 0;
}

evet hocam array1 içeriği korunuyordu
 

GHOSTTt

80+
Katılım
26 Mart 2020
Mesajlar
49
Dahası  
Reaksiyon skoru
14
İsim
x
Üstte yazdığım kod düzgün calısıyor array1 ve 2 ayrı calısıyor fakat sort algoritman düzgün calısıyor gibi bazı durumlarda.
Dostum kodu inceledim her şey için teşekkür ederim ama hala sıkıntı var oda şudur adresler farklı aynı olması lazım
 
Yeni mesajlar Yeni Konu Aç      

SON KONULAR

Forum istatistikleri

Konular
991,840
Mesajlar
8,947,982
Üyeler
156,847
Son üye
cabirplastik
Top Bottom