Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
7
Cevap
419
Tıklama
0
Öne Çıkarma
Biri Allah rızası için şu algoritmayı çözsün pascal için
F
18 yıl
Teğmen
Konu Sahibi

Slm Arkadaşlar

Bilgisayar müh. hazırlık okuyorum ve seneye hazırlık olsun diye programlama öğreniyorum.
bir pascal kitabından çalışıyorum. 5. bölümün sonundaki bir bir soruyu çözemedim.

Soru:
Klavyeden girilen bir sayı ve krakteri okuyan ve aşağıdaki gibi ekrana yazdıran prog. yaz.
örnek:
sayı 7 ve karakter * olsun


yazınca doğru çıkmıyor siz resme bakın

not: girilen sayı çift ise program bir ekler.

sorun:
şimdi ben burda her türlü döngüyü denedim ama bir türlü her satırda (n+2) kadar karakter yazdırmayı bulamadım. yani 1 3 5 kere

cevabı bulan arkadaş belki de programcılık hayatımı kurtaracak
şimdiden teşekkürler

< Resime gitmek için tıklayın >





< Bu mesaj bu kişi tarafından değiştirildi foobar -- 27 Şubat 2007; 13:11:01 >

U
18 yıl
Binbaşı

pascal syntaxını bilmiyorum ama for benzeri bir yapı yok mu pascal'da?

Bak sana şöyle bir Java kodu vereyim, buradan esinlenebilirsin belki{
 
import java.util.Scanner;

public class Baklava2{
public static void main(String args[]){
Scanner klavye = new Scanner(System.in);
System.out.println("N: ");
int N = klavye.nextInt();

for(int i=1; i<N; i++)
System.out.print(" ");
System.out.println("*");

for(int i=1; i<=2*N-3; i++){
for(int j=Math.abs(N-(i+1)); j>0; j--)
System.out.print(" ");
System.out.print("*");
for(int j=1; j<=2*N-3-2*Math.abs(N-i-1); j++)
System.out.print(" ");
System.out.println("*");
}

for(int i=1; i<N; i++)
System.out.print(" ");
System.out.println("*");
}
}


programın çıktısı
< Resime gitmek için tıklayın >



T
18 yıl
Yüzbaşı

for(i=1;i<=sayi;i+=2)
{for(k=1;k<=i;k++)
printf("*")
printf("\n")
}
for(i=sayi-2;i>=1;i-=2)
{for(k=1;k<=i;k++)
printf("*")
printf("\n")
}

böyle bişey olabilir belki. bu C dilinde ama pek farki yok.bir de baklava dilimi gibi çıkmaz.o şekilde çıkması için gotoxy komutu kullanılabilir yada başka yolları da olabilir

*
***
*****
*******
*****
***
*
böyle cikar.


Bu mesaja 1 cevap geldi.
F
18 yıl
Teğmen
Konu Sahibi

tesekkürler arkadaslar tam cevap için ugrasıyorum
donanimhaber de buldum
burada aynı algoritma sabit 5 sayısı için yazılmış ama benimki sabit değil o zaman iş değişiyor

uses crt;
var
a,b,c:integer;
begin clrscr;
for a:=1 to 3 do begin
if a=1 then c:=1;
if a=2 then c:=3;
if a=3 then c:=5;
for b:=1 to c do
write('A');
writeln;
end;
for a:=1 to 2 do begin
if a=1 then c:=3;
if a=2 then c:=1;
for b:=1 to c do
write('A');
writeln;
end;
readln;
end.





< Bu mesaj bu kişi tarafından değiştirildi foobar -- 27 Şubat 2007; 21:24:17 >
Bu mesaja 1 cevap geldi.
H
18 yıl
Yarbay

En basit yöntemle açıklıyorum.

bir tane method yaz (adı row olsun diyelim)

 
row(int space, int star)

bu row methodu , 2 tane paremetre alıyor
ve ekrana space sayisi kadar bosluk , star sayisi kadar yildiz yazdiriyor.




 

main method

mainde ise tek yapman gereken şey
boşluk sayisini ve yildiz sayisini ayarlamak.
daha sonra bu space and star değişkenlerini row methoduna göndermek.
aşağı satıra geçmek


sana tam bir Algoritma vermedim, sadece problemi basite indirgeyip çözmeyi gösterdim.
( algoritmada en önemli şey basite indirgemektir. )

Sen bu yöntemi kullanarak biraz uğraş.
eğer yapamazsan söyle matlabta yaptığım algoritmayı sana gönderiyim.

kolay gelsin


Bu mesaja 1 cevap geldi.
T
18 yıl
Yüzbaşı

tam olarak kodu bu ama c dilinde

#include<stdio.h>
#include<conio.h>
int sayi=23,i,k,x,y;
main()
{
clrscr();
if (sayi%2==0) sayi=sayi+1;
x=(sayi+1)/2;
y=1;
for(i=1;i<=sayi;i+=2)
{
gotoxy(x,y);
for(k=1;k<=i;k++)
printf("*");
printf("\n");
y++;
x--;
}
x=2;
for(i=sayi-2;i>=1;i-=2)
{
gotoxy(x,y);
for(k=1;k<=i;k++)
printf("*");
printf("\n");
y++;
x++;
}
getch();
return 0;
}

sayi değerini istediğin gibi değistir ama fazlası ekranın standart yapısına (80x25 karakter) uymuyor


Bu mesaja 1 cevap geldi.
G
18 yıl
Çavuş

Dostum bende aynısnı php ile hazırladım koddan sonra tam istediğin olay oluyor. Açıklamak gerekirse 3 kez döngü gerekti. For dongüsü, birde hesaplatman lazım. Ve alt ve üstü iki ayrı sistemde çözdüm. Sonuç olarak zorlu bir algoritmaydı.


$al=$_GET['al'];

$bosluk=$al-1;

for($k=$al+1;$k>1;$k-=2)
{
$z=2;// Katsayımız
$bosluk=$k-$z;
$yildiz=$al-($bosluk);

for($c=0;$c<$bosluk/2;$c++)
{
echo "-";
}
for($c=0;$c<$yildiz;$c++)
{
echo "*";
}
for($c=0;$c<$bosluk/2;$c++)
{
echo "-";
}
echo "<br />";
}//işlemi Verilen sayi/2 kez yaz

for($k=0;$k<floor($al/2);$k++)
{

$bosluk=($k+1)*2;
$yildiz=$al-$bosluk;
for($c=0;$c<floor($bosluk/2);$c++)
{
echo "-";
}
for($c=0;$c<$yildiz;$c++)
{
echo "*";
}
for($c=0;$c<floor($bosluk/2);$c++)
{
echo "-";
}
echo "<br />";
}//işlemi Verilen sayi/2 kez yaz


Evet biraz karışık ama yapacak bişey yok. İstediğin yeri tek tek açıklamaya çalışırım



F
18 yıl
Teğmen
Konu Sahibi

arkadaslar cevaplar için tesekkurler programlamaya devam



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.