Myslím si čislo

Programovacie jazyky, rady, poradňa...
marteenka.s
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 41
Registrovaný: 04 sep 2006, 18:14

Myslím si čislo

Príspevok od používateľa marteenka.s »

Potrebujem, aby mi niekto napisal aj vysvetlil (v jazyku C) program, ktory uhadne, na ktore cislo myslim.
Program bude hadat cisla v intervale od 1 po 1000.
A ja si budem mysliet nejake cislo v tomto intervale.
Program sa k tomu cislu bude musiet dopatrat takymto sposobom:
(toto bude printf)
->Cislo na ktore myslis je 500 (to bude dane)
->Ak je tvoje cislo vacsie stlac 1
->AK je tvoje cislo mensie stlac 2
-> Ak som to uhadol,stlac ine cislo.

Malo by to fungovat tak, ze ak sa netrafi a ja stlacim 1 alebo 2, tym sa interval jeho hadania mojho cisla zmensi a on sa onedlho dopatra k mojmu cislu.
Molho by to fungovat pouzitim do,while....alebo pouzitim funkcii void...

Prosim dakujem tomu, kto mi to naprogramuje a vysvetli :)
Diky moc.
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Príspevok od používateľa c-ice »

mne to celkom fungovalo moc som sa stým nehral :wink:

Kód: Vybrať všetko

/*
 *      program_myslym_num.c
 *      
 *      Copyright 2009 lukas <[email protected]>
 *      
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *      
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *      
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */


#include <stdio.h>

int main(int argc, char** argv)
{
	int iCislo=500;
	int iPom,iHornaHranica=1000,iDolnaHranica=0;
	do{
		printf("myslys na cislo: %i\nAk je tvoje cislo vacsie stlac 1 \nAK je tvoje cislo mensie stlac 2 \n",iCislo);
		scanf("%i",&iPom);
		if (iPom==1) {
			iDolnaHranica=iCislo;
			iCislo=iCislo+(iHornaHranica-iCislo)/2;
			if (iDolnaHranica==iCislo) iCislo++; // toto by mohlo myslým ošetrit zaokruhlovanie kedže je tu delenie...
		}
		if (iPom==2) {
			iHornaHranica=iCislo;
			iCislo=iCislo-(iCislo-iDolnaHranica)/2;
			if (iHornaHranica==iCislo) iCislo--; // toto by mohlo myslým ošetrit zaokruhlovanie kedže je tu delenie...
		}
	}while(iPom==2 || iPom ==1);
	//clrscr(); //alebo system('cls');	// need include conio.h
	printf("Myslel si na cislo %i ci ne?",iCislo);
	getchar();
	return 1;
}
:roll:
pheo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 212
Registrovaný: 20 sep 2005, 16:53
Bydlisko: moje hniezdo
Kontaktovať používateľa:

Príspevok od používateľa pheo »

Problém sa volá binárne vyhľadávanie:
applet k tomu:
V podstate máme interval cisel v diskretnom prípade pole čísel, ktoré je zoradené. V tomto pripade asi prepokladame, že myslené číslo je celé z určitého intervalu, napríklad 0 až 20 000. Namiesto toho aby sme sa pýtali či je to číslo 0, 1, ...až 20 000 , môžeme sa pýtať rozumnejšie, a to štýlom rozdelím interval na 3 časti 0 .... k-1; k; k+1 ....20 000 , kde k by malo byť číslo uprostred intervalu teda 10 000. Odpoveďou na otázku či je dané číslo (napr 500 ) vačšie ako 10 000 môžem niektorý z tých dvoch vyhodiť zo zoznamu prehľadávaných, kedže tie budú buď vždy väčšie/menšie. V našom prípade je to menšie , teda prehľadávam interval 0 ... 9999. Zastavím sa až vtedy keď to k sa bude rovnať hľadanému číslu (500) alebo už interval má nulovú šírku.

Nejaky pseodoko je na vyžšie uvedenom linku na wiki.

edit
//ca no vy ste teda sráči, čo je to za programovanie ked tu smaris rovno uz hotovu vec ? štýlom copy & paste sa nič nenaučí
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: Myslím si čislo

Príspevok od používateľa c-ice »

pheo napísal: edit
//ca no vy ste teda sráči, čo je to za programovanie ked tu smaris rovno uz hotovu vec ?
Tak sorry 20minut nudil som sa a bol som zvedavi ako to spravit

//+ podla obrazka a nicku som usudil že to je dievča a tej je programovanie na nič stačí že dobre vyzerá a prsia zariadia ostatné :wink:
// + kedže to sem dala s popisom akým to sem dala asi neočakávala dlhu diskusiu o tom ako by sa to dalo spravit

//+
marteenka.s napísal: Prosim dakujem tomu, kto mi to naprogramuje a vysvetli :)
Diky moc.
vysvetlil si jej to ty :)... osobne myslým si že sa dá učit aj už na nakodenom kode stačí že to pochopí a bude to vediet aplikovat - objasnit vysvetlit
marteenka.s
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 41
Registrovaný: 04 sep 2006, 18:14

Príspevok od používateľa marteenka.s »

Dakujem vam obom :)
ale predsa c-ice ma pravdu,ja sa jednoduchsie ucim na uz vytvorenom kode a davam si dokopy suvislosti, preco je to tak a ako to funguje.
;)

//autoeditácia príspevku ( 27 Oct 2009, 7:53 )
este jedna otazka:
co vlastne znemena toto v zatvorkach:

int main(int argc, char** argv)

s tym som sa este nestretla
refr0
Star
Star
Príspevky: 521
Registrovaný: 26 nov 2005, 10:55
Bydlisko: Trenčín
Kontaktovať používateľa:

Príspevok od používateľa refr0 »

to je len odovzdavanie nejakych argumentov atd ale to ta nemusi nejako zaujimat... iba to tam nechaj a nic s tym nerob...
marteenka.s
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 41
Registrovaný: 04 sep 2006, 18:14

Príspevok od používateľa marteenka.s »

refr0 napísal:to je len odovzdavanie nejakych argumentov atd ale to ta nemusi nejako zaujimat... iba to tam nechaj a nic s tym nerob...
nedalo by sa tie argumenty niecim inym nahradit? pretoze to nezvyknem pouzivat :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

marteenka.s napísal:nedalo by sa tie argumenty niecim inym nahradit? pretoze to nezvyknem pouzivat :)
nemusíš ich tam vôbec mať, môžeš mať iba int main(){ ... }
marteenka.s
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 41
Registrovaný: 04 sep 2006, 18:14

Príspevok od používateľa marteenka.s »

Dakujem sa informacie,
este poslednu vec by som rada vedela, cyklus sa konci:

"return=1;"

Aku ulohu ma return v tomto programe?
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Príspevok od používateľa c-ice »

marteenka.s napísal:Dakujem sa informacie,
este poslednu vec by som rada vedela, cyklus sa konci:

"return=1;"

Aku ulohu ma return v tomto programe?
Taku ako vkaždom či tam daš return 0, 1 2 ,3 ... nekonecno to je jedno to iba vracia hodnotu ked funkcia main() je int tak musi vratit int hodnotu v pohode môže vracat aj tu vypočitanu hodnotu.. keby je to funkcia typu void nemusi vracat ziadnu hodnotu takze tam ani nemoze byt return keby to je funkcia typu char tak by si v return mohla (resp. musí to vratit nieco typu char) vracat niejaky znak pripadne niejake pole znakov typu char napr.

Kód: Vybrať všetko

char FunkciaAhoj() {
   char pole[]="ahoj";
   return pole;
}
asi by to nemalo hodit error :) ale ako return by ti to malo ked tuto funkciu niekde zavolas vratit ahoj ...
mam dojem ze v kazdom z bezných prostredí pre programovanie ti zobrazuje ze z akým kódom sa aplikácia ukončila tak keby tam napr. otvaras subor a ten sa ti nepodari otvorit tak možež ošetrit aby si vedela čo sa stalo tým že program sa ukonči s kodom 1 a ak sa otvori spravne program sa ukonci z hodnotou 0 ....
Ak predpokladám že to mate niejaky predmet tak čoskoro funkcie začnete tvorit a budete ich volat aby vam niečo vykonaly a tak isto snich budete chciet nejaku odpoved dostat tak to môžež robit cez return.. alebo alternatívou ktorej by sa malo co najviac vyhýbat je pomocou globalnej premennej

BTW: na FChPT sa učite aj programovat :) ale ako pozeram nič zložite
marteenka.s
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 41
Registrovaný: 04 sep 2006, 18:14

Príspevok od používateľa marteenka.s »

Ucime sa programovat, ale akosi nie som obdarena logikou, ktora by ma posunula dalej v programovani :-D
Takze som beznadajeny talent.... :-D
Odkial si zistil, ake veci programujeme?
Napísať odpoveď