a nećemo sad komplicirat
a nećemo sad komplicirat
složi ga sa modulo, ima primjera ove druge vrste koliko hoćeš
Napisao sam ovaj program:
#include <stdio.h>
#include <stdlib.h>
#define DIMENZIJA 25
#define DIMENZIJA2 25
int main()
{
int i, j, k, unos, min, brojac,brojac2;
int pom;
int polje[DIMENZIJA];
int polje2[DIMENZIJA2];
brojac = 0;
brojac2 = 0;
do {
printf("Unesi broj: ");
scanf("%d",&unos);
polje[brojac] = unos;
if (unos) brojac=brojac+1;
if (unos%2==0){
polje2[brojac2]=unos;
if (unos) brojac2=brojac2+1;
}
} while (unos && brojac<DIMENZIJA);
for(i=0;i<brojac-1;i++) {
min = i;
for (j=i+1;j<brojac;j++)
if (polje[j] < polje[min]){
min = j;
}
pom = polje[i];
polje[i] = polje[min];
polje[min] = pom;
}
printf("\n Uzlazno sortirano polje:\n");
for (i=0;i<brojac;i++) {
printf("%d \n " , polje[i]);
}
printf("\n Polje parnih brojeva:\n");
for (k=0;k<brojac2;k++) {
printf("%d \n " , polje2[k]);
}
printf("\n Parnih brojeva u polju ima: %d \n", brojac2);
system("PAUSE");
return 0;
}
Kako da ubacim stvaranje slučajnih DVOZNAMENKASTIH brojeva koji se spremaju u polje? Znam da ima neke veze sa srand, time(null) itd. Slobodno sve ubacite u ovaj moj program. I može li mi onda netko predložiti kako da proširim kod? Tako da bude što više banalnije napisano- sam ću proširiti i++, ali može li se još što napraviti. Također bi trebao i opis što program radi. Unaprijed havala!
Kako da ubacim stvaranje slučajnih DVOZNAMENKASTIH brojeva koji se spremaju u polje? Znam da ima neke veze sa srand, time(null) itd.
srand() ti treba za "posijati" generator "nasumičnih" brojeva.
Najcesce se koristi sistemski sat za to, te stoga se upotrebljava u formi
srand((unsigned)time(NULL));
To obaviš negdje na početku programa.
Kasnije u petlji prođeš kroz cijeli niz i dodjeliš svakom članu broj preko funkcije rand:
polje[i]=(rand()%90)+10);
Dakle rand generira broj, sa modulo djeljenjem dobijamo broj od 0-89, i tom broju pribrajamo 10 pa nam je konačni broj koji upisujemo u polje u rasponu od 10-99.
jel može netko rješit ovaj zadatak? danas sam ga imao na labosu i nisam ga znao rješit do kraja, samo sam djelomično...
Grgec?
Čim je težak zadatak, on je kriv. Ja bi znao riješiti sve osim polja. Za ispis brojava staviš for sa brojačem i jednim if-om za v.
Dečki jel ko zna di ima kakva kopiraona(TVZ) di mogu nabaviti skripte iz C-a?
Dečki jel ko zna di ima kakva kopiraona(TVZ) di mogu nabaviti skripte iz C-a?
Blizu STŠ, kod nekih zgrada ima baba skriptarka.
Ne kužim ovu notaciju
define MAX 20
polje[MAX*MAX] to bi bilo 400 elemenata ili na što je mislio?
Ne kužim ovu notaciju
define MAX 20
polje[MAX*MAX] to bi bilo 400 elemenata ili na što je mislio?
Jep. Redci*stupci.
jel može netko rješit ovaj zadatak? danas sam ga imao na labosu i nisam ga znao rješit do kraja, samo sam djelomično...
Evo moj pokušaj :D
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 20
int prebroji(int* niz, int x,int duljina)
{
int i,koliko=0;
for(i=0;i<duljina;++i)
if( niz[i]==x) ++koliko;
return koliko;
}
int main()
{
int N, i, j, najvise;
int niz[(MAX+1)*(MAX+1)], ponavljanja[MAX+1];
unsigned int iseed = (unsigned int)time(NULL);
srand (iseed);
do
{
printf("Ucitaj N: "); scanf("%d",&N);
}while (N<5 || N>20);
for (i=0;i<MAX*N;++i)
niz[i]=rand()%(N+1); //ide +1 jer uključujemo i N
najvise=-1;
//prebrojavanje uz ispis brojeva, te nalazenje koliko puta se pojavio najveći broj
for(i=0;i<=N;++i)
{
ponavljanja[i]=prebroji(niz,i,MAX*N);
if (ponavljanja[i]>najvise) najvise=ponavljanja[i];
printf("%4d",i);
}
printf("\n");
for(i=0;i<=N;++i)
printf("%4d",ponavljanja[i]);
printf("\n\n");
for(i=0;i<=N;++i)
printf("____");
printf("\n");
for( j=0;j<najvise;++j )
{
for( i=0;i<=N;++i )
{
if (ponavljanja[i]>j+1) printf(" |");
if (ponavljanja[i]==j+1) printf(" v");
if (ponavljanja[i]<j+1 || ponavljanja[i]==0) printf(" ");
}
printf("\n");
}
printf("\n\n");
system ("pause");
return 0;
}
Ne kužim ovu notaciju
define MAX 20
polje[MAX*MAX] to bi bilo 400 elemenata ili na što je mislio?
Jep. Redci*stupci.
Onda mi se ne slaže ovo , kaže da treba generirati MAX*10 elemenata, a u primjeru ih ima 100 generiranih
ili negdje činim previd
jel može netko rješit ovaj zadatak? danas sam ga imao na labosu i nisam ga znao rješit do kraja, samo sam djelomično...
Evo moj pokušaj :D
to je to, da, samo što je prof rekao da ne smijemo uvodit nove funkcije, sve mora biti unutar main.
i sad vidim da sam nešto izostavio, kad sam slikao, nije se uhvatio zadnji red. dole trebaju bit crtice
jel može netko rješit ovaj zadatak? danas sam ga imao na labosu i nisam ga znao rješit do kraja, samo sam djelomično...
Evo moj pokušaj :D
to je to, da, samo što je prof rekao da ne smijemo uvodit nove funkcije, sve mora biti unutar main.
i sad vidim da sam nešto izostavio, kad sam slikao, nije se uhvatio zadnji red. dole trebaju bit crtice
Dobro, to je još jedna for petlja na kraju koja ispisuje nešto tipa " __ ".
A ako bez funkcija, onda kod prebrojavanja staviš još tu petlju unutar prve petlje. Ovako je kraće :D
Ja sam složio nešto ovako, (u C++ mi lakše), a izostavio sam do-while provjeru i crtanje:
#include<iostream>
#include<ctime>
#define MAX 20
using namespace std;
int main()
{
int polje[MAX*MAX] ={0};
int n = 10, i, j, brojac=0;
int *rezultat = new int [n+1];
srand(time(NULL));
for(i=0; i<MAX*n;i++)
polje[i] = rand()% (n + 1);
for(i=0; i<=n; i++) {
brojac = 0;
for(j=0; j<MAX*n; j++)
if(i == polje[j])
brojac++;
rezultat[i] = brojac;
}
for(i=0; i<=n; i++)
cout<< i << " ";
cout<< endl;
for(i=0; i<=n; i++)
cout<< rezultat[i] << " ";
delete [] rezultat;
return 0;
}
Evo i sa "grafikom":
#include<iostream>
#include<iomanip>
#include<ctime>
#define MAX 20
using namespace std;
int main()
{
int polje[MAX*MAX] ={0};
int n=0, i, j, brojac=0;
cout<< "Unesi N: ";
cin>> n;
while(n<5 || n>20)
{
cout<< "N mora biti u intervalu <5,20>!" << endl;
cout<< "Unesi ponovno N: ";
cin>> n;
}
int *rezultat = new int [n+1];
srand(time(NULL));
for(i=0; i<MAX*n;i++)
polje[i] = rand()% (n + 1);
int najvisi = 0;
for(i=0; i<=n; i++) {
brojac = 0;
for(j=0; j<MAX*n; j++)
if(i == polje[j])
brojac++;
rezultat[i] = brojac;
if(najvisi<rezultat[i])
najvisi = rezultat[i];
}
for(i=0; i<=n; i++)
cout<< setw(3) << i;
cout<< endl;
for(i=0; i<=n; i++)
cout<< setw(3) << rezultat[i];
cout<< endl;
for(i=0; i<=n; i++)
cout<< "___";
cout<< endl;
int pomocni = 1;
do
{
for(i=0; i<=n; i++)
if(rezultat[i]>pomocni)
cout<< setw(3) << "|";
else
if(rezultat[i]==pomocni)
cout<< setw(3) << "v";
else
cout<< setw(3) << " ";
cout<< endl;
pomocni++;
}while(pomocni<=najvisi);
delete [] rezultat;
return 0;
}
Evo i sa grafikom:
Ništa od toga, to je c++. Mora baš biti u c-u. Zadnje što smo radili su polja. Sve poslije toga se ne smije koristiti.
Evo i sa grafikom:
Ništa od toga, to je c++. Mora baš biti u c-u. Zadnje što smo radili su polja. Sve poslije toga se ne smije koristiti.
jedino što se razlikuje je uvesti printf umjesto cout, scanf umjesto cin i malloc umjesto new
ostalo je sve isto
ostalo je sve isto
Osim činjenice da u c-u ne šljaka grafika.
ostalo je sve isto
Osim činjenice da u c-u ne šljaka grafika.
ne , nisi skužio, grafika sam stavio pod navodnike, to je isto ispis okomite crte i slova v na isti način u konzoli
ma Lujo je dao OK kod, a ja sam napisao u C++, ali ga uopće nije problem prevesti, bitan je mehanizam, a on je isti i u C i C++,
ma Lujo je dao OK kod, a ja sam napisao u C++, ali ga uopće nije problem prevesti, bitan je mehanizam, a on je isti i u C i C++,
Ups, moj bed. Sorry, krivo sam shvatio. Mislio sam da je to ona grafika kao u c++.
ma Lujo je dao OK kod, a ja sam napisao u C++, ali ga uopće nije problem prevesti, bitan je mehanizam, a on je isti i u C i C++,
Ups, moj bed. Sorry, krivo sam shvatio. Mislio sam da je to ona grafika kao u c++.
nema veze, ja sam se samo malo poigrao, vidio sam da nije bed, da je Lujo to riješio
ali, kažem, nije to problem prevesti, uglavnom, najbitnije je skužiti mehanizam rješenja zadatka
a petlje i polja su isti
jedina razlika ovdje je cout umjesto printf, cin umjesto scanf i new umjesto malloc
#include <stdio.h>
#define MAX 20
int main()
{
srand((unsigned)time(NULL));
int n, count, line, row, largest;
int array[MAX*MAX], occurence[21] = {0};
while (1) {
printf("Unesite broj u intervalu [5, MAX]: ");
scanf("%d", &n);
if ((n <= MAX) && (n >= 5))
break;
printf("Unijeli ste pogresan broj. ");
}
for (count = 0; count < (MAX * n); count++) {
array[count] = rand() % (n + 1);
occurence[array[count]] += 1;
}
for (count = 0, largest = 0; count < (n + 1); count++) {
if (occurence [count] > largest)
largest = occurence [count];
}
for (count = 0; count < (n + 1); count++)
printf(" %2d", count);
printf("\n");
for (count = 0; count < (n + 1); count++)
printf(" %2d", occurence[count]);
printf("\n");
for (count = 0; count < ((n + 1) * 3); count++)
printf("_");
printf("\n");
for (line = 0; line < (largest+1); line++) {
for (row = 0; row < (n + 1); row++) {
if (line < occurence [row])
printf(" |");
else if (line == occurence [row])
printf(" v");
else
printf(" ");
}
printf(" \n");
}
for (count = 0; count < ((n + 1) * 3); count++)
printf("-");
return 0;
}
Eto... laka 2 boda
while (1) {
printf("Unesite broj u intervalu [5, MAX]: ");
scanf("%d", &n);
if ((n <= MAX) && (n >= 5))
break;
printf("Unijeli ste pogresan broj. ");
Ne ovo raditi, ne treba na silu prekidati petlju sa break, kad se to može izvesti bez prekidanja petlje.
Obično se koristi do-while za ovu stvar:
do
{
printf("Unesite broj u intervalu [5, MAX]: ");
scanf("%d", &n);
}while(n>MAX && n<5); // petlja se ponavlja dok se ne unese broj iz zadanog intervala
A meni se za ove provjere svidjela fora MrBlc-a:
printf("Unesite broj u intervalu [5, MAX]: ");
scanf("%d", &n);
while(n>MAX || n<5)
{
printf("Unijeli ste broj izvan intervala [5, MAX]!"); // ulazi se u petlju while tek ako je prvi put unesena pogrešna vrijednost
printf("\nPonovno unesite broj u zadanom intervalu: ");
scanf("%d", &n);
}
while (1) {
printf("Unesite broj u intervalu [5, MAX]: ");
scanf("%d", &n);
if ((n <= MAX) && (n >= 5))
break;
printf("Unijeli ste pogresan broj. ");
Ne ovo raditi, ne treba na silu prekidati petlju sa break, kad se to može izvesti bez prekidanja petlje.
Obično se koristi do-while za ovu stvar:
Zasto ne? Zato break sluzi.
onda kako izgleda najbolje napisani program koji unosi broj sve dok se ne unese željeni broj, i ako ne zadovolji uvjet, ispisati poruku o tome? I da se pri tome istinitost uvjeta provjerava samo na jednom mjestu.
while (1) {
printf("Unesite broj u intervalu [5, MAX]: ");
scanf("%d", &n);
if ((n <= MAX) && (n >= 5))
break;
printf("Unijeli ste pogresan broj. ");
Ne ovo raditi, ne treba na silu prekidati petlju sa break, kad se to može izvesti bez prekidanja petlje.
Obično se koristi do-while za ovu stvar:
Zasto ne? Zato break sluzi.
zato što je on "pod moraš", ako može bez njega, ne koristi se
onda kako izgleda najbolje napisani program koji unosi broj sve dok se ne unese željeni broj, i ako ne zadovolji uvjet, ispisati poruku o tome? I da se pri tome istinitost uvjeta provjerava samo na jednom mjestu.
while iz gornjeg primjera, to je MrBlc-a fora,
Meni je najzgodnija do, while varijanta. Jednom će izvršit sigurno, i nastavit odmah dalje ako je sve ok. Slično ko MrBlc-ov način, ali kompaktnije zapisano.