Kako elemene matrice simetrično preslikati obzirom na sporednu dijagonalu?
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.713.115
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Moze li mi neko reci gdje sam pogrijesio u ovom zadatku:
1. Potrebno je unijeti interval I[x,y] i ipisati sve proste brojeve u tom intervalu.
#include <iostream>
using namespace std;
int main ()
{
int x, y, c;
cout<<"Unesite donju granicu intervala: ";
cin>>x;
cout<<"Unesite gornju granicu intervala: ";
cin>>y;
for(int i=x; i<=y; i++)
{
c=0;
for(int j=2; j<=y/2; j++)
{
if(i%j==0)
{
c++;
break;
}
}
if(c==0 && i!=1)
{
cout<<i<<"\t";
}
}
system("pause");
return 0;
}
Kako elemene matrice simetrično preslikati obzirom na sporednu dijagonalu?
Kod matrice 3x3 imamo tri zamjene, odnosno mijenjamo 6 elemenata, a elementi na sporednoj dijagonali ostaju na mjestu. Zamjena ide redom [0][0] = [2][2], [0][1] = [2][1]
#include <iostream>
#include<string>
int main()
{
int matrica[3][3] = { {2, 5, 3}, {8, 9, 1}, {4, 7, 5 } };
for(int i = 0; i < 3 - 1 ; i++)
{
for(int j = 0; j < 3-i-1; j++)
{
int temp = matrica[i][j];
matrica[i][j] = matrica[3 - i - 1][3 - j - 1];
matrica[3 - i - 1][3 - j - 1] = temp;
}
}
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
std::cout<< matrica[i][j] << " ";
}
std::cout<< "\n";
}
return 0;
}
Moze li mi neko reci gdje sam pogrijesio u ovom zadatku:
1. Potrebno je unijeti interval I[x,y] i ipisati sve proste brojeve u tom intervalu.
#include <iostream>
using namespace std;
int main ()
{
int x, y, c;
cout<<"Unesite donju granicu intervala: ";
cin>>x;
cout<<"Unesite gornju granicu intervala: ";
cin>>y;
for(int i=x; i<=y; i++)
{
c=0;
for(int j=2; j<=y/2; j++)
{
if(i%j==0)
{
c++;
break;
}
}
if(c==0 && i!=1)
{
cout<<i<<"\t";
}
}
system("pause");
return 0;
}
Pogledaj malo ovaj kod, provjeru vršiš do sqrt broja kojeg testiraš, a provjeru prima zasnivaš na breaku, tako da nijedna dodatna varijabla nije potrebna, jer ako je kvadrat j veći od i, broj je prim.
Naravno, mogao sam ubaciti i varijablu bool za provjeru unutar izraza if kod modula, ali čini mi se nepotrebno, mada ovako još nisam vidio da netko radi.
#include <iostream>
using namespace std;
int main ()
{
int x, y, i, j;
cout<<"Unesite donju granicu intervala: ";
cin>>x;
cout<<"Unesite gornju granicu intervala: ";
cin>>y;
for(i=x; i<=y; i++)
{
for(j=2; j*j<=i; j++)
{
if(i%j == 0)
break;
}
if(j * j > i)
cout<< i << " ";
}
system("pause");
return 0;
}
Ako nije problem da mi pomognete tj. kazete na koji nacin bih mogao rijesiti ovaj problem:
U zadatku trebam da upisem neku poziciju za Fiboniccijev niz i da mi ispise koji se broj nalazi na toj poziciji(npr. fib. niz je: 0,1,1,2,3,5,8,13,21,34,... i ako ja unesem broj za poziciju 10 meni treba ispisati broj 34). Ja sam uradio da mi ispise sve brojeve do one granice koju ja unesem, ali ne znam sta trebam uraditi da mi ispise samo ovaj zadnji broj.
Evo kod za ispis svih brojeva do neke granice:
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int x=0,y=1,z=0,g,i=1;
cout<<"Unesi granicu: ";
cin>>g;
cout<<x<<endl;
cout<<y<<endl;
while(i<=g-2)
{
z=x+y;
cout<<z<<endl;
x=y;
y=z;
i++;
}
getch();
}
Deveti po redu fibonacci niza je 34, jer prvi u nizu 0 ima notaciju nultog po redu.
#include <iostream>
using namespace std;
int main ()
{
int broj = 9, prvi = 0, drugi = 1, suma;
while(broj - 1)
{
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
}
cout<< drugi << endl;
return 0;
}
Deveti po redu fibonacci niza je 34, jer prvi u nizu 0 ima notaciju nultog po redu.
#include <iostream>
using namespace std;
int main ()
{
int broj = 9, prvi = 0, drugi = 1, suma;
while(broj - 1)
{
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
}
cout<< drugi << endl;
return 0;
}
Ono sam samo za primjer rekao deseti odnosno deveti po redu, ali meni treba program koji ce mi ispisati bilo koji broj iz niza u ovisnosti koji aj broj unesem, a ne samo 9-ti po redu(ako unesem 7 da mi ispise 13, ako unesem 8 da ispise 21,....)
edit: Uradio sam ovo, hvala na pomoci
Deveti po redu fibonacci niza je 34, jer prvi u nizu 0 ima notaciju nultog po redu.
#include <iostream>
using namespace std;
int main ()
{
int broj = 9, prvi = 0, drugi = 1, suma;
while(broj - 1)
{
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
}
cout<< drugi << endl;
return 0;
}
Ono sam samo za primjer rekao deseti odnosno deveti po redu, ali meni treba program koji ce mi ispisati bilo koji broj iz niza u ovisnosti koji aj broj unesem, a ne samo 9-ti po redu(ako unesem 7 da mi ispise 13, ako unesem 8 da ispise 21,....)
to jest to, umjesto što sam inicijaliziao varijablu broj, samo je treba unijeti sa cin objektom, sve veće od 0, ako se unese 0, da ispiše 0.
Ovako bi odgovaralo matematičkoj notaciji, za unos 0 dobije se 0, ostalo po redu
#include <iostream>
using namespace std;
int main ()
{
int broj, prvi = 0, drugi = 1, suma;
cin>> broj;
while(broj > 0)
{
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
}
cout<< prvi << endl;
return 0;
}
Kroz while petlju samo zbrajamo prvi i drugi i za sljedeći korak prvi postaje drugi, a drugi prethodna suma. Nakon toga varijablu broj dekrementiramo.
Trebm za informatiku uradit neki kviz. Treba da racuna bodove i na kraju da mi pokaze te bodove i ocjenu po mogucnosti. Na internetu sam trazio ali nista nema, u programiranj nisam neki strucnjak! POMOC
Pa za to niti ne trebaš biti stručnjak. Ne možeš znati nešto što tek učiš, dakle glavu u knjigu/bilježnicu i gledaj što tamo piše o programskom jeziku u kojem bi to trebao napraviti (pretpostavljam C/C++ čim pišeš u ovoj temi).
Niste me razumjeli, trebam napravit kviz u bilo kojem programu, programiranje nismo radili, tako da...
.., programiranje nismo radili, tako da...
..čekaš da ti to netko drugi napravi?
// Program koji će racunati korijen datog broja //
//Korijen se u c++ racuna funkcijom, gdje varijanta datog broja tipa double. Ova funkcija se koristi kao operator zajedno sa size of i ()
#include<iostream>
using namespace std;
int main ()
{
double broj,korijen;
cout<<"Unesi broj:";
cin>>broj;
korijen=sqrt;
cout<<"korijeni broja"<<broj<<"su";
cout<<korijen<<"i"<<-korijen<<endl;
system("pause");
return 0;
}
Ako neko ima program slican, moze mi poslat kod da prepravim pitanja i to je to. -_-
Meni nije mi jasno, kako to da to trebas napraviti, a niste ucili programiranje? Zanimljivo...
Da imas profesoricu poput moje, bilo bi ti jasno. :
Da imas profesoricu poput moje, bilo bi ti jasno. :
Koja profesorica, koja škola?
Moze li mi neko reci gdje sam pogrijesio u ovom zadatku:
1. Potrebno je unijeti interval I[x,y] i ipisati sve proste brojeve u tom intervalu.
Pogledaj malo ovaj kod, provjeru vršiš do sqrt broja kojeg testiraš, a provjeru prima zasnivaš na breaku, tako da nijedna dodatna varijabla nije potrebna, jer ako je kvadrat j veći od i, broj je prim.
Naravno, mogao sam ubaciti i varijablu bool za provjeru unutar izraza if kod modula, ali čini mi se nepotrebno, mada ovako još nisam vidio da netko radi.
#include <iostream>
using namespace std;
int main ()
{
int x, y, i, j;
cout<<"Unesite donju granicu intervala: ";
cin>>x;
cout<<"Unesite gornju granicu intervala: ";
cin>>y;
for(i=x; i<=y; i++)
{
for(j=2; j*j<=i; j++)
{
if(i%j == 0)
break;
}
if(j * j > i)
cout<< i << " ";
}
system("pause");
return 0;
}
Moze li mi neko reci zasto se ovdje provjera vrsi do koriejna broja?
Potreban ispis broja koji se nalazi na unesenoj poziciji u Fibonaccijevom nizu.
#include <iostream>
using namespace std;
int main ()
{
int broj, prvi = 0, drugi = 1, suma;
cin>> broj;
while(broj > 0)
{
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
}
cout<< prvi << endl;
return 0;
}
Moze li mi neko reci u ovom zadatku zasto je u while uvjet postavljen da je (broj>0)?
Niste me razumjeli, trebam napravit kviz u bilo kojem programu, programiranje nismo radili, tako da...
Bilo kojem, kažeš?
HAI
I HAS A ANSWR1 ITZ "Da"
I HAS A ANSWR2 ITZ "Nisam ucio"
I HAS A COUNTER ITZ 0
VISIBLE "Je li ovo sa Bugovog foruma?"
GIMMEH INPUT1
VISIBLE "Zasto zicas odgovore?"
GIMMEH INPUT2
VISIBLE "Izaberi broj. 1 ili 2."
GIMMEH INPUT3
VISIBLE ":)"
BOTH SAEM INPUT1 AN ANSWR1, O RLY?
YA RLY
VISIBLE "Bravo, pogodio si di si bio"
UPZ COUNTER!!1
NO WAI
VISIBLE "Ne znas ni di si"
OIC
BOTH SAEM INPUT2 AN ANSWR2, O RLY?
YA RLY
VISIBLE "Tak je, nije profesorica kriva"
UPZ COUNTER!!1
NO WAI
VISIBLE "Ne lazi"
OIC
INPUT3, WTF?
OMG "1"
VISIBLE "LOLCODE"
GTFO
OMG "2"
VISIBLE "Hahaha, pwnd"
UPZ COUNTER!!1
GTFO
OMGWTF
VISIBLE "Sto si to napisao?"
OIC
VISIBLE SMOOSH "Tocnih odgovora: " AN COUNTER AN " od 3"
VISIBLE ":)"
VISIBLE "Copyright sum_of_all_fears"
KTHXBYE
Kao interpreter možete koristiti ovo (obrišite primjer, c/p u polje, "can i has program" i gledajte desno, u stdout, to je "konzola"). Ili ako je netko avanturistički raspoložen, može skinuti "pravi" interpreter LCI, sa IO podrškom i svime!
#include <iostream>
using namespace std;
int main ()
{
int broj, prvi = 0, drugi = 1, suma;
cin>> broj;
while(broj > 0)
{
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
}
cout<< prvi << endl;
return 0;
}
Moze li mi neko reci u ovom zadatku zasto je u while uvjet postavljen da je (broj>0)?
Zato jer, nam while kaze da radi nesto dok je broj koji smo unijeli veci od 0, znaci ako unsemo 0 izbacit ce nam 0 jer ce 'preskociti' while jer ne odgovara uvijetu koji kaze da broj koji se unese mora biti veci od 0, a ako unesemo broj koji je veci od nule onda ce raditi sve sta pise pod while, u ovo primjeru:
suma = prvi + drugi;
prvi = drugi;
drugi = suma;
broj--;
Bok!
Optimiziram kod jednog svog programa i neke radnje ponavljam više puta na nekim strukturama, pa mislim da je najbolje jednostavno cijeli taj kod staviti u jednu funkciju i jednostavno proslijediti adresu na strukturu. Mučio sam se sat vremena da sam pokušam skužiti, i onda barem 3 sata na netu probavao razne dijelove koda nažalost bez uspjeha.
#include <stdio.h>
struct ResultStructure //globalna struktura
{
float base;
float height;
float area;
}my;
void f(struct ResultStructure &area);
int main ()
{
my.base = 12;
my.height = 23;
f(&my);
printf("\n %d",my.area);
return 0;
}
void f(ResultStructure &area)
{
area.area = .5f * (area.base * area.height);
printf("\n area u funkciji %d %d",area.area,&area.area);
}
ovo je neki jednostavni kod koji pokušavam natjerati da radi. Znači ima globalna struktura, čiju adresu šaljem funkciji i u funkciji hoću mjenjati vrijednosti.
Unaprijed hvala na pomoći
Pozdrav. Radi se o binarnom stablu...ako mi neko može pomoći
Neznam kako upisati novi broj, a da ovaj prethodni bude zapamćen...Meni samo zapamti zadnje upisane brojeve.(tj ispiše mi 10 16 14)
Hvala
evo koda
#include <iostream>
using namespace std;
struct cvor{
int broj;
cvor *lijevi;
cvor *desni;
};
void unos(cvor *&stablo, int broj)
{
if(stablo == NULL)
{
cvor *novi;
novi = new cvor;
novi -> broj = broj;
novi ->desni= NULL;
novi ->lijevi= NULL;
stablo = novi;
}
if(broj < stablo->broj)
{
cvor *novi;
novi = new cvor;
novi -> broj = broj;
novi ->desni= NULL;
novi ->lijevi= NULL;
stablo ->lijevi = novi;
}
if(broj > stablo->broj)
{
cvor *novi;
novi = new cvor;
novi -> broj = broj;
novi ->desni= NULL;
novi ->lijevi= NULL;
stablo ->desni = novi;
}
}
void postorder(cvor *stablo)
{
if (stablo != NULL)
{
postorder(stablo->lijevi);
postorder(stablo->desni);
cout << stablo ->broj<< " ";
}
}
int main()
{
cvor * stablo;
stablo = NULL;
int broj;
unos(stablo,14);
unos(stablo,12);
unos(stablo,15);
unos(stablo,16);
unos(stablo,10);
postorder(stablo);
return 0;
}
for(j=2; j*j<=i; j++)
{
if(i%j == 0)
break;
}
if(j * j > i)
cout<< i << " ";
Pa zašto vršimo provjeru do sqrt?
Ako imamo neki broj n koji nije prim, to znači da je djeljiv sa nekim brojem a, a ako je djeljiv sa nekim brojem a, onda je djeljiv i sa nekim brojem b.
n = a * b
Samo jedan od faktora a i b može biti veći od korjena broja n, ali ne oba, kad bi oba bila veća, produkt a * b bi bio veći od n.
Primjer:
64 = 8 * 8
Ako je jedan faktor veći od sqrt 64, onda je drugi manji
64 = 2 * 32
Dakle, za provjeru da li je 64 prim broj nije potrebno ići dalje od 8, jer interval 2-8 sadrži manji faktor koji ide u paru sa većim faktorom, tj. kad provjerimo 2, ne trebamo provjeravati 32.
Drugi izraz ima programersko objašnjenje.
Ako petlja nije prekinuta sa breakom, odnosno ako nema u intervalu 2 - sqrt n djeljivog broja sa n, u tom slučaju je petljja prekinuta sa uvjetom završetka petlje j * j <= i, a to znači da je broj prim.
p.s. ako je što nejasno, pitaj ovdje, ne koristim pp za te svrhe.
edit: rijesen je problem
Sta treba ovdje uraditi ako se unese interval npr. od 0-20 da ne ispisuje 0 i 1 jer prosti brojevi su veci od 1?
Ja sam pokusao staviti if petlju ako se unese x ili y manje od 1 da ispise poruku da se moraju unijeti brojevi veci od 1 i to radi, ali ne mogu uraditi program na taj nacin
if ( x < 1 || y < 1 ) {
cout<< " poruka " <<endl;
system("pause");
return 0;
}
Bok!
#include <stdio.h>
struct ResultStructure //globalna struktura
{
float base;
float height;
float area;
}my;
void f(struct ResultStructure &area);
int main ()
{
my.base = 12;
my.height = 23;
f(&my);
printf("\n %d",my.area);
return 0;
}
void f(ResultStructure &area)
{
area.area = .5f * (area.base * area.height);
printf("\n area u funkciji %d %d",area.area,&area.area);
}
ovo je neki jednostavni kod koji pokušavam natjerati da radi. Znači ima globalna struktura, čiju adresu šaljem funkciji i u funkciji hoću mjenjati vrijednosti.
Unaprijed hvala na pomoći
Pomiješao ti se C i C++, kao i specifikatori formata za printf.
1.
void f(struct ResultStructure &area);
U C++ u je kod deklariranja varijable definiranog strukturnog tipa suvišno navoditi 'struct' keyword. U C-u je to potrebno osim ako ne koristiš typedef.
2.
f(&my);
Ovako se ne radi pass by reference u C++, ali u C-u na taj način prosljeđuješ adresu neke varijable. Dakle ponovno, odluči se hoćeš li koristiti C ili C++ način. Trenutno ti je prototip deklariran tako da funkcija kao argument prima C++ referencu na strukturu, a u ovoj liniji ti funkciji prosljeđuješ memorijsku adresu strukture.
Ako će biti C način, onda funkcija 'f' kao argument treba primati pokazivač na strukturu, a argument joj prosljeđuješ ili pomoću operatora koji daje memorijsku adresu varijable ili pomoću pokazivača, dakle:
void f(ResultStructure *area);
...
f(&my);
a ako će biti C++ način onda funkcija 'f' prima referencu na strukturu, a kao argument joj prosljeđuješ samu strukturu (kompajler će to pretvoriti u potrebnu vrijednost) dakle:
void f(ResultStructure &area);
...
f(my);
3.
printf("\n %d",my.area);
'area' član strukture 'ResultStructure' je float tipa, '%d' je specifikator za integer tip (cijeli broj) tako da nećeš dobiti ono što očekuješ. '%f' je specifikator za floating point tip. Pogledaj ovdje kompletno uputstvo za printf funkciju.
4.
printf("\n area u funkciji %d %d",area.area,&area.area);
Opet korištenje pogrešnog specifikatora...
I samo komentar za kraj, kada imaš globalnu varijablu, nije potrebno okolo prosljeđivati njenu memorijsku adresu budući da se ona nalazi u dosegu cijele source datoteke, pa joj možeš izravno pristupati iz bilo koje funkcije unutar te iste source datoteke (a ako ju želiš učiniti vidljivom i u ostalim source datotekama onda koristiš 'extern' keyword)
Pozdrav. Radi se o binarnom stablu...ako mi neko može pomoći
Neznam kako upisati novi broj, a da ovaj prethodni bude zapamćen...Meni samo zapamti zadnje upisane brojeve.(tj ispiše mi 10 16 14)
Hvala
Zato što u jedan te isti nod pridružuješ različite lijeve i desne nodove, pa ih na kraju uvijek imaš tri.
Probaj ovako sa rekurzijom, kad dođe do null noda dodaje na stablo, na lijevo ili desno ovisno o broju.
#include<iostream>
using namespace std;
struct cvor
{
int broj;
cvor* lijevi;
cvor* desni;
};
void unos(cvor*& stablo, int broj)
{
if (stablo == NULL)
{
stablo = new cvor;
stablo->desni = NULL;
stablo->lijevi = NULL;
stablo->broj = broj;
}
else if (broj > stablo->broj)
unos(stablo->desni, broj);
else unos(stablo->lijevi, broj);
}
void postorder(cvor* stablo)
{
if (stablo != NULL)
{
postorder(stablo->lijevi);
postorder(stablo->desni);
cout << stablo->broj << " ";
}
}
int main()
{
cvor* stablo = NULL;
int broj;
unos(stablo, 14);
unos(stablo, 12);
unos(stablo, 15);
unos(stablo, 16);
unos(stablo, 10);
postorder(stablo);
return 0;
}
Moze pomoc pocetniku?
upisi jedan troznamenkasti broj, ispisati broj njegovih znamenki...
Moze pomoc pocetniku?
upisi jedan troznamenkasti broj, ispisati broj njegovih znamenki...
imat ces jedinice , desetice i stotice
jedinice = broj % 10;
stotice = broj / 100;
desetice = (broj - stotice*100) / 10;
Evo jedno početničko pitanje:
Neka je dana deklaracija dvodimenzionalnog polja:
double elementi[100][50];
Ukoliko bismo elemente polja posložili u tablicu s 100
redaka i 50 stupaca, napišite naredbu koja ispisuje
element koji se nalazi u 30. retku i 18. stupcu.
(Treba napisati samo jednu liniju kôda u kojoj se ispisuje
se samo element, bez oznake za novi red)
Kako biste to riješili?
Zahvaljujem