Keresés

Új hozzászólás Aktív témák

  • Dead_slow

    tag

    válasz [HUN]Zolee #149 üzenetére

    HE-HE.
    Én is ugyanazt a feladatot kaptam beadandónak, nagyon sokat segítettél :))

  • Dead_slow

    tag

    Üdv!

    Elég kezdő vagyok programozás témában, az alábbi feladat megoldásában kellene segítség, csak egy feltétel kell bele, de már fáradt vagyok és nagyon tompa, valszeg rettenet triviális a megoldás, ezért ne röhögjetek ki :D

    Szóval a feladat: Egy sakktbálára bábokat helyezünk el. Programunk kirajzolja a táblát, majd bekér egy lépésszámot. Ezután minden bábot a lépésszámnak megfelelő számú mezővel előre léptet(nagyobb sorszámú sorok felé), majd újra kirajzolja a táblát. A tábláról lelépő figurák természetesen nem kell kirajzoli.

    Nekem ezzel van gondom, ha túl nagy lépésszámot adok meg akkor átlép egy következő oszlopba.

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

    char tabla[10][10];
    int sor,oszlop,lep;
    char imp[3];

    void init(){
    for(sor=0;sor<9;sor++){
    for(oszlop=0;oszlop<9;oszlop++)
    tabla[sor][oszlop]=' ';
    }
    }

    void lerak(){
    char babu;

    do{

    printf("Kerem a babut es a poziciojat pl.:(Ha1): ");
    scanf("%s",imp);

    babu=imp[0];
    oszlop=imp[1]-'a';
    sor=imp[2]-1-'0';

    if(imp[0]!='*')
    tabla[oszlop][sor]=babu;

    }while(imp[0]!='*');

    }

    void rajzol(){
    int i,j;
    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++)
    printf("|%c", tabla[j][i]);
    printf("|\n");
    }
    }

    void leptet(){
    int i,j,k;
    k=0;
    printf("lepeszsam:");
    scanf("%d",&k);



    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++)

    printf("|%c", tabla[j][i-k]);

    printf("|\n");
    }
    }

    int main(){
    init();
    lerak();
    rajzol();
    leptet();
    system("PAUSE");
    return 0;
    }

    [ Szerkesztve ]

  • Dead_slow

    tag

    válasz Gyuri16 #1610 üzenetére

    Köszönöm, a fáradtság úgy néz ki legyőzött. Így már minden szép és jó.
    void leptet(){
    int i,j,k;
    k=0;
    printf("lepeszsam:");
    scanf("%d",&k);


    printf("\n ");
    for(i=0;i<8;i++)
    printf("%c ", 'A'+i);
    printf("\n");
    for(i=0;i<8;i++){
    printf("%d ", i+1);
    for(j=0;j<8;j++){
    if(k>i)
    printf("|%c",tabla[' '][' ']);
    else
    printf("|%c",tabla[j][i-k]);

    }

    printf("|\n");
    }


    }

  • Dead_slow

    tag

    válasz Gyuri16 #1612 üzenetére

    Mondtam, hogy nagyon nem vágom :DDD ,de ettől függetlenül ezer dologgal teszteltem és egyszer sem fagyott meg.

  • Dead_slow

    tag

    válasz Gyuri16 #1614 üzenetére

    Köszönöm, a kiegészítést/magyarázatot! :R
    Már az előző hozzászólás után módosítottam a kódot, nem rég kezdtem el foglalkozni a dologgal, mármint nem a C nyelvvel, hanem az egész programozás témával remélem azért később jobban fog menni és nem okoz majd ekkora nehézséget egy ilyen egyszerűbb program megírása.

  • Dead_slow

    tag

    Üdv!
    Újabb problémám lenne, ezúttal a feladat a következő:
    Egy NxN-es méretű négyzetrácsos táblára bábokat helyezünk el, egy mezőre maximum egyet. A program bekéri a tábla méretét, majd egyenként a bábok pozicioját (pl.:B3). Az utolsó báb után egy x karaktert ütünk.
    A program ezután kijelzi a táblát, valamint minden sorhoz és oszlophoz kijelzi az ott található bábok számát (a nullát nem kell kiírni).

    #include<stdio.h>

    int i,j,sorszum,oszlopszum,meret;
    char tabla[40][40];
    char imp[2];

    void init(){
    for(i=0;i<meret;i++){
    for(j=0;j<meret;j++){
    tabla[i][j]=' ';
    }
    }
    }

    void beker(){
    do{
    printf("Kerem a tabla meretet: ");

    scanf("%d",&meret);

    printf("Kerem a babu poziciojat:");
    scanf("%s",imp);
    if(imp[0]!='x')tabla[imp[1]-'1'][imp[0]-'A']='x';
    }while(imp[0]!='x');

    }

    void rajzol(){

    printf("\n ");

    for(i=0;i<meret;i++)

    printf("%c ", 'A'+i);
    printf("\n");

    for(i=0;i<meret;i++){
    printf("%2d", i+1);

    for(j=0;j<meret;j++){
    if(tabla[i][j]==' ')
    printf("| ");
    else{
    sorszum++;
    printf("|%c",tabla[i][j]);
    }
    }
    printf("|");

    if(sorszum>0) printf(" %d",sorszum);

    sorszum=0;
    printf("\n");
    }
    printf("\n ");
    for(j=0;j<meret;j++){

    oszlopszum=0;
    for(i=0;i<meret;i++){

    if(tabla[i][j]=='x'){
    oszlopszum++;
    }
    }


    if(oszlopszum>0) printf("%d ", oszlopszum);
    else printf(" ");
    }

    printf("\n");
    }
    int main(){
    init();
    beker();
    rajzol();
    system("PAUSE");
    return 0;
    }

    Akármit csinálok az sorok végén mindig a bekért tábla méret jelenik meg az x-ek száma helyett. Mi lehet a gond?

  • Dead_slow

    tag

    Üdv!
    Újabb problémával jelentkezem, feladat következő:
    Írjon cenzúrázó programot. A program beolvas egy mondatot, majd egy tiltott karaktersorozatot. A mondatban kicseréli a karaktersorozat minden előfordulását 3 csillag karakterre(cenzúrázott szó helyett 3 csillagot rajzol). Végül kiírja a cenzúrázott mondatot.

    A feladat megoldása során csak gets, scanf, és a printf függvények használhatók. NEM szabad előre megírt stringkezelő függvényeket használni.

    Szokás szerint elkezdtem megírni :D, de ezt a részt hogy a beolvasott tiltott szó helyére 3 csillagot tegyen nem tudom megcsinálni, megírtam úgy hogy minden karakterét a szónak csillagra cseréli, de ez ugye így nem jó.

    #include <stdio.h>

    int main(){
    int i,j,szohossz,mondathossz;
    char szo[20],mondat[100];

    printf("mondat:");
    gets(mondat);
    printf("szo:");
    scanf("%s", szo);

    i=0;
    while(szo[i]!=0){
    i++;
    }
    szohossz=i;

    i=0;
    while(mondat[i]!=0){
    i++;
    }
    mondathossz=i;

    for(i=0;i<=mondathossz-szohossz;i++){
    for(j=0;j<szohossz;j++){
    if(szo[j]!=mondat[i+j])
    break;
    }
    if(j==szohossz){
    for(j=0;j<szohossz;j++){
    mondat[i+j]='*';
    }
    i=i+szohossz-1;
    }
    }

    printf("%s\n", mondat);


    system("PAUSE");
    return 0;
    }

    Köszönöm :R

  • Dead_slow

    tag

    Üdv!
    Ismét kérdéssel fordulnék a topik olvasóihoz, a feladat a következő lenne:
    Egy egyszerű teleknyilvántartó programot készítünk téglalap alakú telkek kezelésére. A program bekéri a telkek számát, majd bekéri és eltárolja a telkek helyrajzi számát, a tulaj nevét, telek hosszát és szélességét. Ezután a program kiírja azon telek vagy telkek adatait, amelyeknél a legnagyobb a hossz és a szélesség különbsége.
    Eddig jutottam, meghatározza a legnagyobb szélesség-hosszúságú és hosszúság-szélességű tel(ke)ket, csak nem tudom, hogy tudnám rávenni, hogy ahhoz/azokhoz az érték(ek)hez tartozozó mezőket írja ki.
    #include<stdio.h>
    #include<stdlib.h>

    struct telek{
    char nev[41];
    char hely[41];
    int hossz, szeles, kulonb;
    };
    struct telektar{
    int db;
    struct telek *telkek;
    };
    void lefoglal(struct telektar *ft){
    printf("Kerem a telkek szamat:");
    scanf("%d",&(*ft).db);
    (*ft).telkek=(struct telek*)malloc(sizeof(struct telek)*(*ft).db);
    }
    void beker_telek(struct telek *t){
    printf("Tulaj neve: \n");
    scanf("%s",(*t).nev);
    printf("Helyrajziszam: \n");
    scanf("%s",(*t).hely);
    printf("Hosszusag: \n");
    scanf("%d",&(*t).hossz);
    printf("Szelesseg: \n");
    scanf("%d",&(*t).szeles);
    }
    void beker_telektar(struct telektar *tt){
    int i;
    for(i=0;i<(*tt).db;i++){
    beker_telek(&(*tt).telkek[i]);
    }
    }
    void listaz(struct telektar *lt){
    int i,j,max;
    for(i=0;i<(*lt).db;i++){
    if((*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles>0){
    (*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles;
    printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
    }

    else{
    (*lt).telkek[i].kulonb=(*lt).telkek[i].szeles-(*lt).telkek[i].hossz;
    printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
    }
    }
    max=0;

    for(j=0;j<(*lt).db;j++){
    if(max<(*lt).telkek[j].kulonb){
    max=(*lt).telkek[j].kulonb;
    }
    }
    printf("legtorzabb telek: %d",max);
    }
    void felszabadit(struct telektar *ft){
    free((*ft).telkek);
    (*ft).telkek=NULL;
    }
    int main(){
    struct telektar b;
    lefoglal (&b);
    beker_telektar (&b);
    listaz (&b);
    felszabadit (&b);
    return 0;
    }

    [ Szerkesztve ]

  • Dead_slow

    tag

    válasz Jester01 #1627 üzenetére

    Köszönöm, ezzel a kiegészítéssel a listaz függvény végére már tökéletesen működik:

    int k;

    for(k=0;k<(*lt).db;k++){
    if(max==(*lt).telkek[k].kulonb){
    printf("legtorzabb tel(k)ek:\nHelyrajziszam:%s\nTulajdononsa:%s\n Szelessege:%d\n Hosszusaga:%d\n ",(*lt).telkek[k].hely,(*lt).telkek[k].nev,(*lt).telkek[k].hossz,(*lt).telkek[k].szeles);
    }

  • Dead_slow

    tag

    Üdv urak nekem is kellen egy kis segítség.

    Adott egy feladat amiben az adatok bekérését olyen formán kell megadni, hogy: "Lili, 7, Szabó Gergő"
    A kérdés az, hogy hogy tudnám ezt úgy beolvastatni hogy a "Lili" a "7" és a "Szabó Gergő" is egy-egy külön stringben legyen eltárolva.
    Köszönöm :R

    [ Szerkesztve ]

  • Dead_slow

    tag

    Üdv!
    Újra segítséget kérek a topik "lakóitól" itt a feladat: Egy elefánt menhelyre nyilvántartó programot készítünk. A program először bekéri a menhelyen megfordult elefántok számát, majd ezután bekéri és eltárolja az elefántok nevét, a menhelyre érkezés évét, valamint a menhelyről távozás évét(lásd a példát).
    Eztán a program kilistázza évenkénti bontásban az adott évben a menhelyen tartózkodott elefántok nevét. A listázás a legkorábban érkezett elefánt érkezési évétől a legkésőbb távozott elefánt távozási évéig tart.

    Pl.:
    Elefántok száma: 4
    1. Neve: Trombi
    Erkezes: 1998
    Tavozas: 2001
    2. Neve: Frédi
    Erkezes: 1999
    Tavozas: 2000
    3. Neve: Olga
    Erkezes: 1998
    Tavozas: 1999
    4. Neve: Helga
    Erkezes: 2004
    Tavozas: 2005

    Kimenet:
    1998: Trombi, Olga
    1999: Trombi, Frédi, Olga
    2000: Trombi, Frédi
    2001: Trombi
    2002:
    2003:
    2004: Helga
    2005: Helga

    Jelenleg itt tartok, persze nem biztos hogy így jó lesz:
    #include<stdio.h>

    struct elefant{
    char nev[41];
    int erkezes;
    int tavozas;
    };

    struct elefanttar{
    int db;
    struct elefant *elefantok;
    };

    void lefoglal(struct elefanttar *pfe){
    printf("kerem az elefantok szamat: ");
    scanf("%d",&(*pfe).db);
    (*pfe).elefantok=(struct elefant*)malloc(sizeof(struct elefant)*(*pfe).db);
    }

    void beker_elefant(struct elefant *pe){
    printf("Neve: ");
    scanf("%s",(*pe).nev);
    printf("Erkezes: ");
    scanf("%d",&(*pe).erkezes);
    printf("Tavozas: ");
    scanf("%d",&(*pe).tavozas);

    }

    void beker_elefanttar(struct elefanttar *pet){
    int i;
    for(i=0;i<(*pet).db;i++){
    beker_elefant(&(*pet).elefantok[i]);
    }
    }

    void listaz(struct elefanttar *let){
    char c[41];
    int sorba[200];
    int max=0;
    int min=10000;
    int i,j,k;

    for(i=0;i<(*let).db;i++){
    if(max<(*let).elefantok[i].erkezes){
    max=(*let).elefantok[i].erkezes;
    }
    }
    for(j=0;j<(*let).db;j++){
    if(min>(*let).elefantok[j].erkezes){
    min=(*let).elefantok[j].erkezes;
    }
    }
    }
    void felszabadit(struct elefanttar *pfe){
    free((*pfe).elefantok);
    (*pfe).elefantok=NULL;
    }

    int main(){
    struct elefanttar b;
    lefoglal(&b);
    beker_elefanttar(&b);
    listaz(&b);
    felszabadit(&b);
    return 0;
    }

    [ Szerkesztve ]

  • Dead_slow

    tag

    válasz Gyuri16 #1713 üzenetére

    Köszönöm, összehoztam bár nem láncolt listával.
    Nemrég kérdeztem itt, hogy lehetne beolvasni egy ilyen formátumú(pamacs, 7, Vnev Knev) stringet úgy hogy mind a három adatot külön tárolja el, akkor írtál egy scanf-es megoldást, de azt nem fogadták el, mondván, hogy a név állhat simán 3 részből is, csináljam gets-el ezt mondták. Gondoltam feldarabolom, de valamiért nem akar működni, tudom alap dolog, de mégsem jó, az elsőt még kiírja, de a másodikat illetve a harmadikat már nem. Itt a main fv-m.
    int main(){
    printf("adatok: ");
    gets(mondat);
    i=0;
    do{
    elso[i]=mondat[i];
    i++;
    }while(mondat[i]!=',');

    i=i+2;
    do{
    masodik[i]=mondat[i];
    i++;
    }while(mondat[i]!=',');

    i=i+2;
    do{
    harmadik[i]=mondat[i];
    i++;
    }while(mondat[i]!='\0')


    printf("%s\n",elso);
    printf("%s\n",masodik);
    printf("%s\n",harmadik);
    system("pause");
    return 0;
    }

    [ Szerkesztve ]

  • Dead_slow

    tag

    válasz Gyuri16 #1717 üzenetére

    Köszönöm, így már értem :D
    #include<stdio.h>
    char mondat[100];
    char elso[100];
    char masodik[100];
    char harmadik[100];
    int i,j,k,l;

    int main(){
    printf("adatok: ");
    gets(mondat);
    i=0;
    do{
    elso[i]=mondat[i];
    i++;
    }while(mondat[i]!=',');
    elso[i+1]=='\0';

    i=i+2;
    j=0;
    do{
    masodik[j]=mondat[i];
    i++;
    j++;
    }while(mondat[i]!=',');

    i=i+2;
    j=0;
    do{
    harmadik[j]=mondat[i];
    i++;
    j++;
    }while(mondat[i]!='\0');




    printf("%s\n",elso);
    printf("%s\n",masodik);
    printf("%s\n",harmadik);
    system("pause");
    return 0;
    }

  • Dead_slow

    tag

    válasz Gyuri16 #1719 üzenetére

    Annyira nem szigorúak, csak ha, meg van adva egy feladat, akkor pontosan olyannak kell lennie a kimenetnek mint, ami a példában szerepel, valamint néha kikötnek ezt-azt, hogy azt ne használjuk. A lezáró '\0' jogos, de az én kódomban a gépen szerepel, úgy, hogy vagy töröltem innen lányos zavaromban, vagy csak egy korábbi állapotot másoltam be :)
    Amúgy köszömöm, fgets-et tanulmányozom akkor picit.

    [ Szerkesztve ]

Új hozzászólás Aktív témák