Zdravím,
věděl by někdo, jak se postupně vyhodnocují body v algoritmu Cohen-Sutherland?
např. tenhle obrázek. Který bod se bude kdy vyhodnocovat a jak to určím?
Díky za odpovědi.
#15 vitamin
Tak i tak to nejde.
#define N 50
typedef struct zasobnik{
int zas[N];
int v;
}ZASOBNIK;
void Vytvor(ZASOBNIK* zasobnik){
zasobnik->v = 0;
}
void PridejNaKonec(ZASOBNIK* zasobnik, int h){
zasobnik->zas[zasobnik->v] = h;
zasobnik->v++;
}
void OdeberZKonce(ZASOBNIK* zasobnik){
zasobnik->v--;
}
int JePrazdny(ZASOBNIK* zasobnik){
if (zasobnik->v == 0) return 1;
else return 0;
}
int _tmain(int argc, _TCHAR* argv[]){
ZASOBNIK vrchol;
int i, h;
Vytvor(&vrchol);
for(i = 1; i <= N; i++){
PridejNaKonec(&vrchol, i);
}
while(JePrazdny(&vrchol) == 0){
OdeberZKonce(&vrchol);
}
return 0;
}
Takže:
zasobnik = (ZASOBNIK*)malloc(sizeof(ZASOBNIK)); ?
#5 liborb
To hledám, to je pravda :)) Takže nějak takhle by to šlo?
#define N 50
typedef struct zasobnik{
int zas[N];
int v;
}ZASOBNIK;
void Vytvor(ZASOBNIK* zasobnik){
zasobnik = NULL;
}
void PridejNaKonec(ZASOBNIK* zasobnik, int h){
zasobnik->zas[zasobnik->v] = h;
zasobnik->v++;
}
void OdeberZKonce(ZASOBNIK* zasobnik, int h){
zasobnik->v--;
zasobnik->zas[zasobnik->v] = h;
}
int JePrazdny(ZASOBNIK* zasobnik){
if (zasobnik == NULL){
return 1;
}
else return 0;
}
Jinak ještě metoda main:
int _tmain(int argc, _TCHAR* argv[]){
ZASOBNIK* vrchol;
int i, h;
Vytvor(vrchol);
for(i = 1; i <= N; i++){
PridejNaKonec(vrchol, i);
}
while(JePrazdny(vrchol) == 0){
OdeberZKonce(vrchol, h);
}
System("PAUSE");
return 0;
}
Pořád se tomu něco nelíbí.
Příklad mi vznikl nějak takhle:
#define N 50
typedef struct zasobnik{
int[N] zas;
int v;
}ZASOBNIK;
void Vytvor(ZASOBNIK v){
v = NULL;
}
void PridejNaKonec(ZASOBNIK v, int h){
v = h;
}
void OdeberZKonce(ZASOBNIK v, int h){
ZASOBNIK pom;
pom = v;
???
}
int JePrazdny(ZASOBNIK v){
if (v == NULL) return 1
else return 0;
}
Nevím si rady s těmi pointery, jestli je tam mám teď už nasázet nebo tam vůbec nejsou potřeba. A potom metoda OdeberZKonce, vím, že se musí zavést pomocná proměnná, do které se uloží hodnota z vrcholu a pak se vrchol nastaví na předchůdce, ale nevím jak to napsat.
Zdravím vás,
potřeboval bych vysvětlit, jak na to, když mám udělat zásobník, který bude implementovat datovou strukturu a bude vytvořen pomocí statického pole (o max 50 prvcích) a bude také obsahovat index vrcholu zásobníku.
Řekl bych, že to bude vypadat nějak takto:
#define N 50
typedef struct zasobnik{
int[N] zas;
int v;
}ZASOBNIK;
Nevím ale, jestli to má obsahovat nějaké pointery nebo ne.
Díky za radu.
To prostě nahraju obrázek a program mi to převede na stupně šedi? Např. tak jak je to tady? http://pctuning.tyden.cz/hardware/graficke-karty/8721-polopate-rendering_3d_sceny_a_jak_to_priblizne_funguje?start=4
Zdravím,
potřebuju vyřešit tento úkol - Realizujte metodu Z-buffer pro vykreslení scény s rovinami a koulemi. Aplikujte metodu Phongovha osvetlovacího modelu s difúzním povrchem. Použijte kolmou projekci.
Vím, že by mi tady úkoly nikdo řešit neměl, ale já si s tím vůbec nevím rady.
Děkuji!
Super, děkuju mockrát :)
Prostě potřebuju, aby si uživatel mohl otevřít libovolný soubor.
Ahojte, prosím vás, mám dvě otázky.
1) Jak na otevření a načtění libovolného souboru?
2) Kde si můžu navolit, že se výpis souboru bude ukládat do souboru s určitou koncovkou?
Díky za odpovědi.
Fajn, v pořádku, děkuju :)
V main už nemám nic. Čistě jen ty dva body + to co si mi napsal ty.
Metoda Bod:
public class Bod
{
private double x;
private double y;
public Bod()
{
x=0;
y=0;
}
public Bod(double x, double y){
this.x = x;
this.y = y;
}
public String toString()
{
String string = "\nx: "+ getX() + " Y: "+ getY();
return string;
}
public void tisk()
{
System.out.println("Souradnice bodu jsou: "+ this.toString());
}
public double getX()
{
return x;
}
public void setX(double x)
{
this.x = x;
}
public double getY()
{
return y;
}
public void setY(double y)
{
this.y = y;
}
public double delkaX(Bod bod){
return Math.abs(getX() - bod.getX());
}
}
Metoda Vypocet:
public class Vypocet
{
private Bod bod1;
private Bod bod2;
public Vypocet(){
bod1 = new Bod();
bod2 = new Bod();
}
public Vypocet(Bod a, Bod b){
bod1 = a;
bod2 = b;
}
public Bod getBod1(){
return bod1;
}
public void setBod1(Bod a){
bod1 = a;
}
public Bod getBod2(){
return bod2;
}
public void setBod2(Bod b){
bod2 = b;
}
public static double vzdalenost(Bod b1, Bod b2){
double delkaX, delkaY;
delkaX = b2.getX() - b1.getX();
delkaY = b2.getY() - b1.getY();
return Math.sqrt(delkaX*delkaX + delkaY*delkaY);
}
public String toString(){
return String.format("\nBod x: %s,\nBod y: %s,\nDelka usecky: %.10f ", bod1.toString(), bod2.toString(), vzdalenost(bod1, bod2));
}
public void tisk(){
System.out.println(this.toString());
}
}
A metoda s main:
public class VypocetTest
{
public static void main(String[] args){
Bod bod1 = new Bod(90, 40);
Bod bod2 = new Bod(50, 10);
double v = vzdalenost(bod1, bod2);a
}
}
Tak tak, když ale tohle hodím do main, tak mi to vypíše, že ta metoda nebyla nalezena.
Zdravím,
mám menší problém s metodou, mám napsat program, který zjistí vzdálenost svou bodů. Všechno mi funguje, ale jen je problém s tím, že nevím jak to udělat podle zadání.
public static double vzdalenost(Bod b1, Bod b2){
double delkaX, delkaY;
delkaX = b2.getX() - b1.getX();
delkaY = b2.getY() - b1.getY();
return Math.sqrt(delkaX*delkaX + delkaY*delkaY);
}
Metoda main:
public static void main(String[] args){
Bod bod1 = new Bod(90, 40);
Bod bod2 = new Bod(50, 10);
}
V zadání je, že metoda vzdalenost je třídní statická metoda, která se oužije přímo na třídu, v main nevytváří žádné instance.
Nevím jak dál, co doplnit do main a co ne.
Díky vám moc!
Jo, dobře už to funguje, jen mi to hází špatný výsledek, ale s tím už si poradím.
Díky moc všem
#45 oplis1
Jo, to už by šlo :)
Jen mi to ještě píše jakésik 2 chyby:
Warning 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\documents and settings\www\dokumenty\visual studio 2010\projects\zkouska\zkouska\zkouska.c 17 1 zkouska
Error 2 error C1075: end of file found before the left brace '{' at 'c:\documents and settings\www\dokumenty\visual studio 2010\projects\zkouska\zkouska\zkouska.c(10)' was matched c:\documents and settings\www\dokumenty\visual studio 2010\projects\zkouska\zkouska\zkouska.c 38 1 zkouska
Příjde mi, jakoby to mělo problém s tím souborem, který chci otevřít.
Tak:
int main(){
FILE *f;
char* a = "main";
int delka = strlen(a);
char* radek = malloc(strlen(delka) + 1);
int i;
if((f = fopen("rovnice.txt", "r")) == NULL){
printf("Chyba pri praci se souborem!");
return 0;
}
while(!feof(f)){
radek = fgets(radek, 4, f);
if(strcmp(a, radek) == 0 ){
i++;
}
printf("V souboru je %d funkci main: ", i);
free(radek);
fclose(f);
system("PAUSE");
return 0;
}
Změnil jsem jen ten radek a porad to nejede. Já tomu prostě asi nerozumím.
Kompiluju a stejně to i tak nejede. Nemám rád C, už tam mi nadělalo moc problémů :D
To ano, protože ji tam nevidím. To bude nějaká ta záludná chyba pro mě.
Mě myslím ještě Code::Block chybu nevyhodil, ale to je jedno :))
Kde je chyba to nevím.
No spouštím to přes Code::Block a tam to chyby nehlásí, ale otevřu si to ve Visual Studio
zapomněl jsem tam ještě do deklarace dodat int i; :))
Dobře, no, nějak jsem to vykutil a pořád tam mám něco špatně, ze soubory pracuju teď prvně, takže s tím mám trošku problém.
int main(){
FILE *f;
char* a = "main";
int delka = strlen(a);
char radek[delka+1];
if((f = fopen("rovnice.txt", "r")) == NULL){
printf("Chyba pri praci se souborem!");
return 0;
}
while(feof(f)){
radek = fgets(a, 4, f);
if(strcmp(a, radek) == 0 ){
i++;
}
printf("V souboru je %d funkci main: ", i);
fclose(f);
system("PAUSE");
return 0;
}
Program se mi ani nespustí.
Takže když porovnávám slovo main s něčím, co má v souboru 4 písmena, tak to pak funguje ano?
A ještě se chci zeptat, proměnná radek bude typu string? To znamená char[] radek?
Super, už mě začíná opět něco osvicovat :))
A teda jak si výše psal, že to porovnávání nikdy nebude vracet 0, tak co s tím?
Když mám kód -
while(f != EOF){
radek = fgets(a, 4, f);
if(strcmp(main, radek) == 0 ){
i++;
}
Asi bude spatně celý, ale to znamená že v té podmínce bude teda radek že ano?
Zdravím zdravím,
prosím vás kdokoliv, jak můžu naprogramovat, aby uživatel mohl otevřít libovolný soubor? A jak se dá ze souboru zjistit kolikrát se určitý řetězec v souboru nachází?
Díky
Noo dobře, ale stejně nevím, co bych tam měl změnit, spíše teda jak bych to měl změnit.
"Problém" je v tom, že nesmíme použít u tohoto příkladu žádnou z funkcí třídy string.
Zdravím vás,
mám napsat program, který z řetězce ubere od určitého indexu určitý počet znaků a řetězec vypíše. Mám tohle a někde mi to tam hapruje:
void vyradText(char *str, int pocet, int index){
char *zstr;
int i;
str = (char*)malloc(7);
str[0] = 'l';
str[1] = 'e';
str[2] = 'b';
str[3] = 'e';
str[4] = 'd';
str[5] = 'a';
str[6] = '\0';
printf("Retezec je: %s", str);
printf("\nZadej pocet: ");
scanf("%d", &pocet);
printf("Zadej index: ");
scanf("%d", &index);
for(i=index; i<pocet; i++){
str[i] = str[i+pocet];
}
zstr = (char*)malloc(7-pocet);
zstr = str;
for(i=0; i<=sizeof(zstr); i++){
printf("%s", zstr[i]);
}
free(str);
str = NULL;
}
int main()
{
char str;
int pocet, index;
vyradText(str, pocet, index);
}
Díky za pomoc.