Deqarnieux
Hectopat
- Katılım
- 11 Ocak 2021
- Mesajlar
- 154
- Çözümler
- 1
Daha fazla
- Cinsiyet
- Erkek
#include <stdio.h>
int my_strlen(char s1[])
{
int a=0;
int b=0;
for (a=0; s1[a]!= '\0' ;++a)
{
b++;
}
return b;
}
char* my_strcpy(char s1[], char s2[])
{
int a=0;
for(;a<my_strlen(s1);++a)
{
s1[a]=s2[a];
}
return s1;
}
int my_strcmp(char s1[],char s2[])
{
int a=0;
int b;
if(my_strlen(s1)!=my_strlen(s2))
{
return -1;
}
else
{
for(;a<my_strlen(s1);++a)
{
if(s1[a]==s2[a])
{
b=0;
}
else
{
return -1;
}
}
return b;
}
}
char* my_strcat(char s1[],char s2[])
{
int a;
int b=my_strlen(s1);
for(a=0;a<my_strlen(s2);++a)
{
s1=s2[a];
b+=1;
}
return s1;
}
char* my_strncat(char s1[],char s2[],int n)
{
int a;
int b=my_strlen(s2);
for(a=0;a!=n;++a)
{
s2=s1[a];
b+=1;
}
return s2;
}
void son(){
printf("Islem sonlanmistir.\n");
}
int main()
{
char s1[]= "anime";
char s2[]= "kitap";
int f;
int k;
int p;
printf("1-Dizilerin kac harften olustugunu gosterir.\n");
printf("2-s2 dizisini s1 dizisine kopyalar.\n");
printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
printf("istediginiz islemi seciniz.\n");
scanf("%d",&f);
if (f==1)
{
goto bir;
}
else if (f==2)
{
goto iki;
}
else if (f==3)
{
goto uc;
}
else if (f==4)
{
goto dort;
}
else
{
goto bes;
}
bir:
printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n",my_strlen(s1),my_strlen(s2));
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d",&p);
if (p==1)
{
}
else if (p==2)
{
son();
return 0;
}
iki:
my_strcpy(s1,s2);
printf("1. dizi = %s\n",s1);
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d",&p);
if (p==1)
{
}
else if (p==2)
{
son();
return 0;
}
uc:
if(my_strcmp(s1,s2)==0)
{
printf("Islem sonucu %d diziler esittir.\n",my_strcmp(s1,s2));
}
else
{
printf("Islem sonucu %d diziler farklidir.\n",my_strcmp(s1,s2));
}
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d",&p);
if (p==1)
{
}
else if (p==2)
{
son();
return 0;
}
dort:
my_strcat(s1,s2);
printf("1. Dizi = %s\n",s1);
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d",&p);
if (p==1)
{
}
else if (p==2)
{
son();
return 0;
}
bes:
printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n5 harfi gecemez.\n");
scanf("%d",&k);
my_strncat(s1,s2,k);
printf("2. Dizi = %s\n",s2);
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d",&p);
if (p==1)
{
}
else if (p==2)
{
son();
return 0;
}
return 0;
}
#include <stdio.h>
int my_strlen(char* str) {
int i = 0;
while (str[i] != 0) {
++i;
}
return i;
}
char* my_strcpy(char* dest, char* src) {
int i = 0;
while (src[i] != 0) {
dest[i] = src[i];
}
dest[i] = src[i];
return dest;
}
int my_strcmp(char* str1, char* str2) {
int i = 0;
while (1) {
if (str1[i] != str2[i]) {
return str1[i] < str2[i] ? -1 : 1;
}
if (str1[i] = 0) {
return 0;
}
}
}
char* my_strcat(char* str1, char* str2) {
int i1 = 0;
int i2 = 0;
while (str1[i1] != 0) {
++i1;
}
while (str2[i2] != 0) {
str1[i1] = str2[i2];
++i1;
++i2;
}
str1[i1] = str2[i2];
return str1;
}
char* my_strncat(char* str1, char* str2, int n) {
int i1 = 0;
int i2 = 0;
while (str1[i1] != 0) {
++i1;
}
for (; i2 < n; ++i2, ++i1) {
str1[i1] = str2[i2];
}
str1[i1] = str2[i2];
return str1;
}
void son() {
printf("Islem sonlanmistir.\n");
}
void bir(char* str1, char* str2) {
printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(str1), my_strlen(str2));
}
void iki(char* str1, char* str2) {
my_strcpy(str1, str2);
printf("1. dizi = %s\n", str1);
}
void uc(char* str1, char* str2) {
int result = my_strcmp(str1, str2);
if (result == 0) {
printf("Islem sonucu %d diziler esittir.\n", result);
}
else {
printf("Islem sonucu %d diziler farklidir.\n", result);
}
}
void dort(char* str1, char* str2) {
my_strcat(str1, str2);
printf("1. Dizi = %s\n", str1);
}
void bes(char* str1, char* str2) {
int n = 0;
printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n 5 harfi gecemez.\n");
scanf("%d", &n);
my_strncat(str1, str2, n);
printf("2. Dizi = %s\n", str2);
}
int secFonk() {
int sec = 0;
printf("1-Dizilerin kac harften olustugunu gosterir.\n");
printf("2-s2 dizisini s1 dizisine kopyalar.\n");
printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
printf("istediginiz islemi seciniz.\n");
scanf("%d", &sec);
return sec;
}
int flagFonk() {
int flag = 0;
printf("Baska islem yapmak istiyormusunuz.\nEvet = 1 Hayir = 2\n");
scanf("%d", &flag);
return flag;
}
int main() {
char s1[] = "anime";
char s2[] = "kitap";
int sec = 0;
int k = 0;
int p = 0;
volatile int flag = 1;
while (flag) {
sec = secFonk();
switch (sec) {
case 1: bir(s1, s2); break;
case 2: iki(s1, s2); break;
case 3: uc(s1, s2); break;
case 4: dort(s1, s2); break;
case 5: bes(s1, s2); break;
default: printf("Hatali tuslama yaptiniz.\n"); break;
}
flag = flagFonk();
}
return 0;
}
Kılar. C'de true yoktur.Bu 1 = True eşitliğini yanlış kılmaz.
Volatile keyword'ünü öğrenmenizi tavsiye ederim.Kodun sonunda devam etmek ister misiniz diye sorup p'ye 1 ve 2 atayacakmış. Rastgele değer dönmeyecek. Hayır için kullanıcı 2 yazarsa döngü sonlanacak.
#include <stdio.h>
int my_strlen(char s1[]) {
int a = 0;
int b = 0;
for (a = 0; s1[a] != '\0'; ++a) {
b++;
}
return b;
}
char* my_strcpy(char s1[], char s2[]) {
int a = 0;
for (; a < my_strlen(s1); ++a) {
s1[a] = s2[a];
}
return s1;
}
int my_strcmp(char s1[], char s2[]) {
int a = 0;
int b;
if (my_strlen(s1) != my_strlen(s2)) {
return -1;
}
for (; a < my_strlen(s1); ++a) {
if (s1[a] == s2[a]) {
b = 0;
}
else {
return -1;
}
}
return b;
}
char* my_strcat(char s1[], char s2[]) {
int a;
int b = my_strlen(s1);
for (a = 0; a < my_strlen(s2); ++a) {
s1 = s2[a];
b += 1;
}
return s1;
}
char* my_strncat(char s1[], char s2[], int n) {
int a;
int b = my_strlen(s2);
for (a = 0; a != n; ++a) {
s2 = s1[a];
b += 1;
}
return s2;
}
void son() {
printf("Islem sonlanmistir.\n");
}
int main() {
char s1[] = "anime";
char s2[] = "kitap";
int f;
int k;
int p;
printf("1-Dizilerin kac harften olustugunu gosterir.\n");
printf("2-s2 dizisini s1 dizisine kopyalar.\n");
printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
printf("istediginiz islemi seciniz.\n");
scanf("%d", &f);
if (f == 1) {
goto bir;
}
else if (f == 2) {
goto iki;
}
else if (f == 3) {
goto uc;
}
else if (f == 4) {
goto dort;
}
else {
goto bes;
}
bir:
printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(s1), my_strlen(s2));
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d", &p);
if (p == 1) {
}
else if (p == 2) {
son();
return 0;
}
iki:
my_strcpy(s1, s2);
printf("1. dizi = %s\n", s1);
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d", &p);
if (p == 1) {
}
else if (p == 2) {
son();
return 0;
}
uc:
if (my_strcmp(s1, s2) == 0) {
printf("Islem sonucu %d diziler esittir.\n", my_strcmp(s1, s2));
}
else {
printf("Islem sonucu %d diziler farklidir.\n", my_strcmp(s1, s2));
}
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d", &p);
if (p == 1) {
}
else if (p == 2) {
son();
return 0;
}
dort:
my_strcat(s1, s2);
printf("1. Dizi = %s\n", s1);
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d", &p);
if (p == 1) {
}
else if (p == 2) {
son();
return 0;
}
bes:
printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n5 harfi gecemez.\n");
scanf("%d", &k);
my_strncat(s1, s2, k);
printf("2. Dizi = %s\n", s2);
printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n");
scanf("%d", &p);
if (p == 1) {
}
else if (p == 2) {
son();
return 0;
}
return 0;
}
Bilgim var dostum fakat neyin true olduğunu göstermemişsin.1 = True
Görünüşü 400 satır kod olduğu için incelemem lazım ama goto kullanmadan kod yazmak mümkün.
Bu şekilde yapılırsa compiler'ın insafına kalınır.
Çok değil, C ile ilgili konulara yazmadan önce sadece 2 gram C öğrenmenizi tavsiye ediyorum.
#include <stdio.h>
int my_strlen(char* str) {
int i = 0;
while (str[i] != 0) {
++i;
}
return i;
}
char* my_strcpy(char* dest, char* src) {
int i = 0;
while (src[i] != 0) {
dest[i] = src[i];
}
dest[i] = src[i];
return dest;
}
int my_strcmp(char* str1, char* str2) {
int i = 0;
while (1) {
if (str1[i] != str2[i]) {
return str1[i] < str2[i] ? -1 : 1;
}
if (str1[i] = 0) {
return 0;
}
}
}
char* my_strcat(char* str1, char* str2) {
int i1 = 0;
int i2 = 0;
while (str1[i1] != 0) {
++i1;
}
while (str2[i2] != 0) {
str1[i1] = str2[i2];
++i1;
++i2;
}
str1[i1] = str2[i2];
return str1;
}
char* my_strncat(char* str1, char* str2, int n) {
int i1 = 0;
int i2 = 0;
while (str1[i1] != 0) {
++i1;
}
for (; i2 < n; ++i2, ++i1) {
str1[i1] = str2[i2];
}
str1[i1] = str2[i2];
return str1;
}
void son() {
printf("Islem sonlanmistir.\n");
}
void bir(char* str1, char* str2) {
printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(str1), my_strlen(str2));
}
void iki(char* str1, char* str2) {
my_strcpy(str1, str2);
printf("1. dizi = %s\n", str1);
}
void uc(char* str1, char* str2) {
int result = my_strcmp(str1, str2);
if (result == 0) {
printf("Islem sonucu %d diziler esittir.\n", result);
}
else {
printf("Islem sonucu %d diziler farklidir.\n", result);
}
}
void dort(char* str1, char* str2) {
my_strcat(str1, str2);
printf("1. Dizi = %s\n", str1);
}
void bes(char* str1, char* str2) {
int n = 0;
printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n 5 harfi gecemez.\n");
scanf("%d", &n);
my_strncat(str1, str2, n);
printf("2. Dizi = %s\n", str2);
}
int secFonk() {
int sec = 0;
printf("1-Dizilerin kac harften olustugunu gosterir.\n");
printf("2-s2 dizisini s1 dizisine kopyalar.\n");
printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n");
printf("4-s2 dizisini s1 dizininin sonuna ekler.\n");
printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n");
printf("istediginiz islemi seciniz.\n");
scanf("%d", &sec);
return sec;
}
int flagFonk() {
int flag = 0;
printf("Baska islem yapmak istiyormusunuz.\nEvet = 1 Hayir = 2\n");
scanf("%d", &flag);
return flag;
}
int main() {
char s1[] = "anime";
char s2[] = "kitap";
int sec = 0;
int k = 0;
int p = 0;
volatile int flag = 1;
while (flag) {
sec = secFonk();
switch (sec) {
case 1: bir(s1, s2); break;
case 2: iki(s1, s2); break;
case 3: uc(s1, s2); break;
case 4: dort(s1, s2); break;
case 5: bes(s1, s2); break;
default: printf("Hatali tuslama yaptiniz.\n"); break;
}
flag = flagFonk();
}
return 0;
}
Kılar. C'de true yoktur.
Volatile Keyword'ünü öğrenmenizi tavsiye ederim.
Sizin yazdığınız ile compile edilen şey aynı olmuyor.
119. satır hatalı bu arada.
Hala sadece boşlukları siliyorum. Nerede kod yazıyorsunuz, nasıl kopyalıyorsunuz anlamıyorum.
Belki okumak isteyen olur diye okunaklı halini paylaşayım.
Kod:#include <stdio.h> int my_strlen(char s1[]) { int a = 0; int b = 0; for (a = 0; s1[a] != '\0'; ++a) { b++; } return b; } char* my_strcpy(char s1[], char s2[]) { int a = 0; for (; a < my_strlen(s1); ++a) { s1[a] = s2[a]; } return s1; } int my_strcmp(char s1[], char s2[]) { int a = 0; int b; if (my_strlen(s1) != my_strlen(s2)) { return -1; } for (; a < my_strlen(s1); ++a) { if (s1[a] == s2[a]) { b = 0; } else { return -1; } } return b; } char* my_strcat(char s1[], char s2[]) { int a; int b = my_strlen(s1); for (a = 0; a < my_strlen(s2); ++a) { s1 = s2[a]; b += 1; } return s1; } char* my_strncat(char s1[], char s2[], int n) { int a; int b = my_strlen(s2); for (a = 0; a != n; ++a) { s2 = s1[a]; b += 1; } return s2; } void son() { printf("Islem sonlanmistir.\n"); } int main() { char s1[] = "anime"; char s2[] = "kitap"; int f; int k; int p; printf("1-Dizilerin kac harften olustugunu gosterir.\n"); printf("2-s2 dizisini s1 dizisine kopyalar.\n"); printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n"); printf("4-s2 dizisini s1 dizininin sonuna ekler.\n"); printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n"); printf("istediginiz islemi seciniz.\n"); scanf("%d", &f); if (f == 1) { goto bir; } else if (f == 2) { goto iki; } else if (f == 3) { goto uc; } else if (f == 4) { goto dort; } else { goto bes; } bir: printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(s1), my_strlen(s2)); printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n"); scanf("%d", &p); if (p == 1) { } else if (p == 2) { son(); return 0; } iki: my_strcpy(s1, s2); printf("1. dizi = %s\n", s1); printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n"); scanf("%d", &p); if (p == 1) { } else if (p == 2) { son(); return 0; } uc: if (my_strcmp(s1, s2) == 0) { printf("Islem sonucu %d diziler esittir.\n", my_strcmp(s1, s2)); } else { printf("Islem sonucu %d diziler farklidir.\n", my_strcmp(s1, s2)); } printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n"); scanf("%d", &p); if (p == 1) { } else if (p == 2) { son(); return 0; } dort: my_strcat(s1, s2); printf("1. Dizi = %s\n", s1); printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n"); scanf("%d", &p); if (p == 1) { } else if (p == 2) { son(); return 0; } bes: printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n5 harfi gecemez.\n"); scanf("%d", &k); my_strncat(s1, s2, k); printf("2. Dizi = %s\n", s2); printf("Baska islem yapmak istiyormusunuz.\nEvet=1 Hayir=2\n"); scanf("%d", &p); if (p == 1) { } else if (p == 2) { son(); return 0; } return 0; }
Ödevin süresi 18.00 olsa da düzenleyip cevapladığın için teşekkür ederim. Switch case kullanarak bir kaç hatası ile birlikte ödevi teslim ettim.Değişkenleri her zaman ilklendir.
Değişkenlere güzel isim var. f, k ve p anlamsız. 2 haftaya unutursun ne olduklarını.
Çok fazla değiştirmemeye çalıştım ama ben kabaca böyle yapardım. Aslında pointer aritmetiği kullanmak çok daha mantıklı olacaktır.
Strcmp de direkt öyle çalışmaz, sıfırdan küçük değer verir, direkt -1 vermez her zaman. Ama bu seviye için önemli değil.
Kod:#include <stdio.h> int my_strlen(char* str) { int i = 0; while (str[i] != 0) { ++i; } return i; } char* my_strcpy(char* dest, char* src) { int i = 0; while (src[i] != 0) { dest[i] = src[i]; } dest[i] = src[i]; return dest; } int my_strcmp(char* str1, char* str2) { int i = 0; while (1) { if (str1[i] != str2[i]) { return str1[i] < str2[i] ? -1 : 1; } if (str1[i] = 0) { return 0; } } } char* my_strcat(char* str1, char* str2) { int i1 = 0; int i2 = 0; while (str1[i1] != 0) { ++i1; } while (str2[i2] != 0) { str1[i1] = str2[i2]; ++i1; ++i2; } str1[i1] = str2[i2]; return str1; } char* my_strncat(char* str1, char* str2, int n) { int i1 = 0; int i2 = 0; while (str1[i1] != 0) { ++i1; } for (; i2 < n; ++i2, ++i1) { str1[i1] = str2[i2]; } str1[i1] = str2[i2]; return str1; } void son() { printf("Islem sonlanmistir.\n"); } void bir(char* str1, char* str2) { printf("1. dizide %d tane harf var.\n2. dizide %d tane harf var.\n", my_strlen(str1), my_strlen(str2)); } void iki(char* str1, char* str2) { my_strcpy(str1, str2); printf("1. dizi = %s\n", str1); } void uc(char* str1, char* str2) { int result = my_strcmp(str1, str2); if (result == 0) { printf("Islem sonucu %d diziler esittir.\n", result); } else { printf("Islem sonucu %d diziler farklidir.\n", result); } } void dort(char* str1, char* str2) { my_strcat(str1, str2); printf("1. Dizi = %s\n", str1); } void bes(char* str1, char* str2) { int n = 0; printf("1. Dizinin kac harfi s2 Dizisine eklensin.\n 5 harfi gecemez.\n"); scanf("%d", &n); my_strncat(str1, str2, n); printf("2. Dizi = %s\n", str2); } int secFonk() { int sec = 0; printf("1-Dizilerin kac harften olustugunu gosterir.\n"); printf("2-s2 dizisini s1 dizisine kopyalar.\n"); printf("3-s1 dizisi ile s2 dizisini karsilastirir.\n"); printf("4-s2 dizisini s1 dizininin sonuna ekler.\n"); printf("5-s1 dizisini 5 harften fazla olmayacak sekilde s2 dizisine ekler.\n"); printf("istediginiz islemi seciniz.\n"); scanf("%d", &sec); return sec; } int flagFonk() { int flag = 0; printf("Baska islem yapmak istiyormusunuz.\nEvet = 1 Hayir = 2\n"); scanf("%d", &flag); return flag; } int main() { char s1[] = "anime"; char s2[] = "kitap"; int sec = 0; int k = 0; int p = 0; volatile int flag = 1; while (flag) { sec = secFonk(); switch (sec) { case 1: bir(s1, s2); break; case 2: iki(s1, s2); break; case 3: uc(s1, s2); break; case 4: dort(s1, s2); break; case 5: bes(s1, s2); break; default: printf("Hatali tuslama yaptiniz.\n"); break; } flag = flagFonk(); } return 0; }