Aktív témák
-
andorpapa
őstag
Életjátékot kellene csinálni C-ben, úgy, hogy csak a while és a for ciklust lehet használni. Bemásolom ide a szabályt, és az alapját a programnak.
SZABÁLY:
Készítsen C nyelvű programot az életjáték szimulálására. A program működjön a következő szabályok alapján:
1. A játékot négyzethálón játszuk, amelyben minden egyes sejt életben van vagy halott.
2. Minden generáció állapotát az előző generáció állapotából számoljuk a 3. és 4. szabály alapján.
3. Az élő sejt életben marad, ha a szomszédos cellákban (az átlós szomszédokat is figyelembe vesszük) 2 vagy 3 élő sejt található. Ellenkező esetben a sejt elpusztul.
4. A halott sejt helyén élet jelenik meg, ha pontosan 3 élő szomszédja van.
Az eddigi program:
# include <stdio.h>
main () {
int screen [80][25];
int ,x,y,szsz;
for (y=0; y<=24; ++y)
for (x=0; x<=79; ++x)
screen[x][y]=0;
for (y=10; y<=12; ++y)
for (x=39; x<=41; ++x)
screen [x][y]=1;
for (y=0;y<=24;++y)
for (x=0;x<=79;++x)
if (screen [x][y])
printf(''x'');
else
printf('' '');
printf(''\n'');
}
Nos, ebbe kell valahogy beleerőszakolni a következő sorokat is:
szsz=screen[x-1][y-1]+screen[x][y-1]+screen[x+1][y-1]+screen[x-1][y]+
screen[x+1][y]+screen[x-1][y+1]+screen[x][y+1]+screen[x+1][y+1];
if (szsz==3)
screen[x][y]=1;
else
screen[x][y]=0;
A működő programban mozogni kezd a sejthalmaz, tehát minden körben újabb sejtek keletkeznek. Az egyetlen probléma, hogy nem tudom, hova és hogyan kellene berakni az szsz változót, hogy valóban működjön a dolog.
Segítségeteket előre is köszönöm.COOLNESS! - somebody ssssstop me!
-
andorpapa
őstag
Tudom, nem illik ilyen gyakran UP-polni, de tényleg baromira sürgős, és a topicot meg törölni fogom, ha születik megoldás (tehát nem a hozzászólások számára utazom ).
COOLNESS! - somebody ssssstop me!
-
andorpapa
őstag
Nem hagyom elsüllyedni...please help.
COOLNESS! - somebody ssssstop me!
-
andorpapa
őstag
Tutira tud valaki segíteni!
COOLNESS! - somebody ssssstop me!
-
Joooe
tag
Szia!
szsz=screen[x-1][y-1]+screen[x][y-1]+screen[x+1][y-1]+screen[x-1][y]+
screen[x+1][y]+screen[x-1][y+1]+screen[x][y+1]+screen[x+1][y+1];
Ezzel az a probléma, hogy a tábla széleinél nem fog működni.
A kiszámítására valami hasonló függvény lenne a legegyszerűbb szerintem:
int EloSzomszedok(int x, int y)
{
int dy,dx;
int szum=0;
for (dy=-1; dy<=1; dy++)
for (dx=-1; dx<=1; dx++)
{
if ( (dx==0 && dy==0) || (x+dx<0) || (x+dx>=80) || (y+dy<0) || (y+dy>=25)) continue;
szum+=screen[x+dx][y+dy];
}
return szum
}Hogy mit gondolok a nyugati civilizációról? Azt hiszem, jó ötlet lenne.
-
Viktor77
titán
Én sajnos csak egy UP-al.
Csinálni kell. Kész. Pont.
-
andorpapa
őstag
És ezzel hogyan fog ''életre kelni'' a cucc? Tehát hogyan rakjam bele a fent említett programba, hogy a végeredmény egy ''mozgókép'' legyen? Amúgy köszönöm, hogy veszed a fáradtságot, és foglalkozol egy ilyen (gondolom számodra az) primitív kérdéssel.
COOLNESS! - somebody ssssstop me!
-
Balala
csendes tag
Hali,
Ilyesmire gondolsz?
Quick'n'Dirty, de ezt kérted.
Üdv,
Balala
main () {
int screen [80][25];
int x,y,szsz;
for (y=0; y<=24; y++)
for (x=0; x<=79; x++)
screen[x][y]=0;
screen [10][11]=1;
screen [10][10]=1;
screen [11][10]=1;
screen [12][10]=1;
screen [12][11]=1;
do {
for (y=0;y<=24;y++)
for (x=0;x<=79;x++)
if (screen [x][y])
printf(''x'');
else
printf('' '');
for (y=1; y<24; y++)
for (x=1; x<79; x++) {
szsz=screen[x-1][y-1]+screen[x][y-1]+screen[x+1][y-1]+screen[x-1][y]+
screen[x+1][y]+screen[x-1][y+1]+screen[x][y+1]+screen[x+1][y+1];
if (szsz==3)
screen[x][y]=1;
else
screen[x][y]=0;
}
} while (1);
printf(''\n'');
} -
andorpapa
őstag
Illetve történik valami, felfelé vándorolnak, de nem vagyok benne biztos, hogy ezek tényleg vándorolnak. Szóval nem is tudom. Valami látványosabbra lenne szükség.
COOLNESS! - somebody ssssstop me!
-
andorpapa
őstag
Nos?
COOLNESS! - somebody ssssstop me!
-
Flashy
veterán
-
Joooe
tag
válasz andorpapa #10 üzenetére
Szeritem két hibája van a dolognak, bár lehet nem hibák, nem ismerem pontosan mi a játék lényege.
1: A szomszédok meghatározásánál már modosított adatokat is használ, vagyis a következő időpillanat meghatározásához nem a jelenlegi állapotot, hanem félig a jelenlegit félig a következőt veszi figyelembe.
2: a feltétel vizsgálat sem jó, egyszerűen azt vizsgálja hogy 3-e az élő szomszédok száma, te ennél ''bonyolultabb'' feltételt írtál le.Hogy mit gondolok a nyugati civilizációról? Azt hiszem, jó ötlet lenne.
-
Flashy
veterán
http://serendip.brynmawr.edu/complexity/life.html
itt kipróbálhatod hogy a tied jól működik-e. bár a széleinél ez is kihal. nem találom pedig egyszer olyan jót találtam ahol ilyen tipikus állásokat is megmutatnak.
ápdét: na ez jó
http://www.bitstorm.org/gameoflife/
[Szerkesztve] -
andorpapa
őstag
Néztem én is neten, nagyon durva dolgok vannak, de itt most tényleg egy nagyon alapszintű cucc kellene. És az a baj, hogy nem vagyok biztos abban, hogy burjánzanak a sejtek, szóval elég zizin jelenik meg az egész. Ha van valami C fordítód, akkor fordítsd le, nézd meg te is:
#include <stdio.h>
main () {
int screen[80][25];
int x,y,szsz;
for (y=0; y<=24; y++)
for (x=0; x<=79; x++)
screen[x][y]=0;
screen[10][11]=1;
screen[10][10]=1;
screen[11][10]=1;
screen[12][10]=1;
screen[12][11]=1;
do {
for (y=0;y<=24;y++)
for (x=0;x<=79;x++)
if (screen[x][y])
printf(''x'');
else
printf('' '');
for (y=1; y<24; y++)
for (x=1; x<79; x++) {
szsz=screen[x-1][y-1]+screen[x][y-1]+screen[x+1][y-1]+screen[x-1][y]+screen[x+1][y]+screen[x-1][y+1]+screen[x][y+1]+screen[x+1][y+1];
if (szsz==3)
screen[x][y]=1;
else
screen[x][y]=0;
}
} while (1);
printf(''\n'');
}COOLNESS! - somebody ssssstop me!
-
Balala
csendes tag
Bocs, #14-nek tök igaza van...
Ez most burjázani fog..
Valahogy még nem az igazi, mert a kiindulás az elvileg a glide, és
annak stabilnak kellene lennie...
B.
main () {
int screen1[80][25];
int screen2[80][25];
int x,y,szsz;
for (y=0; y<=24; y++)
for (x=0; x<=79; x++) {
screen1[x][y]=0;
screen2[x][y]=0;
}
screen1[10][10]=1;
screen1[11][10]=1;
screen1[12][10]=1;
screen1[11][12]=1;
screen1[12][11]=1;
do {
for (y=0;y<=24;y++)
for (x=0;x<=79;x++)
if (screen1[x][y])
printf(''x'');
else
printf('' '');
for (y=1; y<24; y++)
for (x=1; x<79; x++) {
szsz=screen1[x-1][y-1]+screen1[x][y-1]+screen1[x+1][y-1]
+screen1[x-1][y]+ screen1[x+1][y]+
screen1[x-1][y+1]+screen1[x][y+1]+screen1[x+1][y+1];
if ((szsz == 3) || (szsz == 2))
screen2[x][y]=1;
else
screen2[x][y]=0;
}
for (y=0;y<=24;y++)
for (x=0;x<=79;x++)
screen1[x][y] = screen2[x][y];
} while (1);
printf(''\n'');
} -
Joooe
tag
válasz andorpapa #16 üzenetére
nem éppen optimális megoldás, de most ennyire fussa
#include <stdio.h>
int screen[80][25];
int EloSzomszedok(int x, int y)
{
int dy,dx;
int szum=0;
for (dy=-1; dy<=1; dy++)
for (dx=-1; dx<=1; dx++)
{
if ( (dx==0 && dy==0) || (x+dx<0) || (x+dx>=80) || (y+dy<0) || (y+dy>=25)) continue;
szum+=screen[x+dx][y+dy];
}
return szum;
}
int main()
{
int screen2[80][25];
int esz;
int x,y,szsz;
for (y=0; y<=24; ++y)
for (x=0; x<=79; ++x)
screen[x][y]=0;
for (y=10; y<=12; ++y)
for (x=39; x<=41; ++x)
screen [x][y]=1;
while (true)
{
for (y=0;y<=24;++y)
{
for (x=0;x<=79;++x)
if (screen[x][y]) printf(''x'');
else printf(''-'');
}
for (y=0;y<=24;++y)
for (x=0;x<=79;++x)
{
esz=EloSzomszedok(x,y);
if (screen[x][y])
{
if (!(esz==2 || esz==3)) screen2[x][y]=0;
else screen2[x][y]=1;
}
else
{
if (esz==3) screen2[x][y]=1;
else screen2[x][y]=0;
}
}
for (y=0;y<=24;++y)
for (x=0;x<=79;++x)
screen[x][y]=screen2[x][y];
// ide kéne valami várakoztatás
}
}Hogy mit gondolok a nyugati civilizációról? Azt hiszem, jó ötlet lenne.
-
Flashy
veterán
rakjatok bele valami oszcillálót, az látványosabb mint ez a mákostészta a tumbler jópofa a második linkről amit adtam
-
Flashy
veterán
hehe ez nagyonjó. pedig megírtam már én is minden programnyelven, de most itt nézem meg huzigálom bele egérrel a sejteket Bővebben: link
-
andorpapa
őstag
Köszönöm mindenkinek a segítséget, azt, hogy ilyen bőkezűen elhalmoztatok megoldás-hegyekkel. Jó arcok járnak ide a PH!-ra, én mindig is mondtam...
COOLNESS! - somebody ssssstop me!
-
Joooe
tag
-
Balala
csendes tag
Jogos, köszi, emiatt nem stabil a glide.
Naakkor:
if ((((szsz == 3) || (szsz == 2)) && (screen1[x][y] == 1)) || ((screen1[x][y] == 0) && (szsz == 3)))
screen2[x][y]=1;
else
screen2[x][y]=0;
Másztam vissza melózni, a főnököm ecetes printerkábellel vesz elégtételt,
ha meglátja, hogy itt jótékonykodom.
Üdv.,
B. -
eXodus
őstag
andorpapa légyszi ne töröljed a topikot.
-
Seci
tag
Sziasztok
Valaki tudna nekem segíteni?
Egy olyan progit kellene c-ben, ami több tetszőlegesen nagy (string-ként tárolt) hexadecimális számot ad össze.
Az input formája: soronként egy szám megadása jön, az inputot a '=' zárja.
A szám megadásában a hexadecimális karakterek szerepelhetnek, a kis és
nagybetűk nem különböznek. Az inputot a be.txt fájlból kell olvasni! Az
output az számok összege hexadecimális formában. Az outputot a ki.txt fájlba
kell írni! Esetleg, ha van valakinek egy kérem küldjön egy e-mailt.
Köszönöm!
Példa input:
3bF
1A
21111111111111111FF
FfF00000
=
Példa output:
21111111112110115d8 -
Protezis
őstag
SZTE TTK Programozás alapjai??
Bocs az offért, de kíváncsi vok -
VladimirR
nagyúr
Hi
nekem is kellene irnom egy eletjatekot, de c++-ban es olyan extra ficsorok kellenenek bele, mint:
-osztaly(ok)
-operator overloadning
-lehetőség szerint öröklés
-többfajta konstruktor, másoló konstruktor
-értékadó operátor
ebbol az osztalyok, es a tobbfajta konstruktor megvan, de a tobbit nem tudom, hogyan kellene belepreselni
a progi itt van, ha lenne ra valakinek ideje: Bővebben: link, Bővebben: link, Bővebben: link
ezen kivul hogyan tudom c++-ban megmondani, hogy egy valtozo melyik memoriacimen jojjon letre?
egeszen pontosan arra lenne szuksegem, hogy egy 25*80*2-es tomb a $b800:00 cimen legyen
pascalban ez igy nez ki: t:array[1..25,1..80,1..2] of char absolute $b800:00; es azeret kene, mert igy ennek a tombnek a segitsegevel tudnam irni a kepernyot
a segitsegeteket elore is koszonom
szerk.: jah es megvalami: mivel en borland c++-ban csinalom, meg tudna nezni valaki, hogy fordul-e a program gnu c++, vagy ms vc++ alatt?
thx
[Szerkesztve] -
Panther
HÁZIGAZDA
setmem -mel elvileg tudsz írni a memóriába bárhova (bár én még sosem használtam, csak a helpben leltem).
Más: Tudja valaki hogy a Turbo C++ 3.0 miért írja ki nekem a '' bool b; '' sorra, hogy ''Type name expected''? Szóval miért nem fogadja el a bool típust? (int-tel müxik)
MOD: Persze ''valami.cpp'' -ként mentve, azaz a C++ fordítóval fordítva.
[Szerkesztve][ RIOS Release 5 – multiportal engine by Panther ]
-
Szalma
őstag
(C/C++ online referencia Bővebben: link)
Szeretettel:
Szalma -
Szalma
őstag
(Mennie kellene pedig. Mindig van valami probléma Borlandos cuccokkal... Válts fordítót! Pl. Digital Mars (Bővebben: link), Open Watcom (Bővebben: link), stb.)
Szeretettel:
Szalma -
Miracle
senior tag
a turboC++ szerintem mar vagy 20 eves, es a c++ elso valtozataiban meg nem volt bool (ansi szabvany csak 1998ban lett, azelott is, azota is folyamatosan alakul) tehat
vagy egy ujabb C++ fordito,
vagy egy typedef int bool;
. #define true 1
. #define false 0
. //bar ez gany, nagyon
vagy atirod szepen mindet intre
[Szerkesztve]értelmező késziszótár :: rekurzió --> lásd : rekurzió
-
Panther
HÁZIGAZDA
OK, akkor azért van tényleg mert a korábbi C++-okban még nem volt. Erre tudtam én is csak gondolni. Most már van, ez tuti... de hát ugye a TurboC++ 3.0 ettől még nem ismeri.
Akkor maradok az '' enum bool { false, true }; '' megoldásnál, sztem még talán ez a legelegánsabb. Mindenkinek kösz aki hozzászólt!
[Szerkesztve][ RIOS Release 5 – multiportal engine by Panther ]
Aktív témák
- LG 34GS95QE-B: OLED paneles, ívelt gamer monitor
- Milyen billentyűzetet vegyek?
- Politika
- Milyen házat vegyek?
- Autós topik látogatók beszélgetős, offolós topikja
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Kerékpárosok, bringások ide!
- Egérpad topik
- Kés topik
- Vodafone mobilszolgáltatások
- További aktív témák...
- Dell 5820: Intel Xeon W-2135, 64GB DDR4, 256GB NVMe SSD, Nvidia Quadro P600, USB 3.1 C/A, ÁFÁs
- Eladó alig használt benq Zowie xl 2411P kihasználatlanság miatt karcmentes, tökéletes állapotban
- Honor X6a 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S23 Ultra 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- iPhone 15 Pro Max 256GB