Pomoc oko zadataka

Teme vezane za console/GUI programiranje u C/C++ jeziku
5 post(ov)a • Stranica: 1/1.

Pomoc oko zadataka

PostPostao/la Heisenberg » 05 lip 2015, 14:57

Pozdrav!! Long time no see.
Naime, imam pitanje oko zadatka, siguran sam da cu Vas pitati za još koji hint kako dan bude napredovao, ali ovo je prvi zadatak.
Mislim da ce biti povelika tema, pa stoga oprostite na duljini posta.

Ovo moram predati mailom do utorka, ali volio bih to predati sto prije tako da stignem ponoviti za kolokvij.

1. zadatak.
Sekvencijalno pretrazivanje – unosite niz dok korisnik ne unese nulu. Pitajte ga koji broj traži i sekvencijalnom pretragom pronađite taj broj (ili javite da ne postoji)


Naime, program radi ali sam korisnika ograničio na 10 mogucih brojeva, sve dok ne lupi nulu. Kako bi modificirao trenutni kod?

cpp code
#include <iostream>
using namespace std;

int main()
{
int niz[10], broj, pozicija = -5;

for (int i=0; i<10; i++)
{
cout << "Unesite " << i + 1 << ". broj: ";
cin >> niz[i];

if (niz[i] == 0) break;
}

cout << "Unesite broj koji trazite: ";
cin >> broj;

for (int i = 0; i<10; i++)
{
if (niz[i] == broj)
{
pozicija = i;
break;
}

}
if (pozicija >= 0)
{
cout << "broj je pronadjen na poziciji: " << pozicija + 1 << endl;
}
else
cout << "Broj nije pronadjen!" << endl;

system("pause");
return 0;
}





2. zadatak
Definirajte varijablu i dodijelite joj vrijednost 10. Zatim postavite pokazivač na nju, te ispišite njegovu vrijednost. Promijenite vrijednost na 15 (pomoću pokazivača) te ga ponovno ispišite.

Mislim da bi ovo trebalo radit, ali provjerite za svaki slucaj.

cpp code
#include <iostream>
using namespace std;

int main()
{
int n = 10;
int *pok;
pok = &n;

cout << pok << endl;
cout << *pok << endl;
cout << &pok << endl;
cout << n << endl;
cout << &n << endl;

*pok = 15;
cout << *pok << endl;
cout << n << endl;


system("pause");
return 0;
}



3. zadatak
Dinamički alocirajte memoriju na dva pokazivača tipa int. Pitajte korisnika da unese ta dva elementa, te ispišite koji je od njih veći. Pobrinite se da oslobodite korišteni prostor na kraju programa.


Tu nemam jos nikakav kod jer ne znam kako poceti.

edit: Trenutna verzija koda.

cpp code
#include <iostream>
#include <string>
using namespace std;

int main()
{
int polje[2];
cout << "Unesi 2 cijela broja odvojena razmakom! " << endl;

int *p = polje;
cin >> *p >> *(p + 1);


if (*p > *(p + 1))
{
cout << "Veci broj je: " << *p << endl;
}
else
{
cout << "Veci broj je: " << *(p + 1) << endl;
}


system("pause");
return 0;
}
Zadnja izmjena: Heisenberg; 05 lip 2015, 15:47; ukupno mijenjano 2 put/a.
He who dares, wins.

Re: Pomoc oko zadatka

PostPostao/la gagiD » 05 lip 2015, 15:27

Ne mozes s klasicnim C nizom, osim ako ne napravis niz od 1000000 clanova i nadas se da neko nece unijet 1000001 :D

Koristi vector. Inicijalno ce imati 0 clanova, pa samo dodajes na kraj sve dok se ne unese 0.

cpp code
while(1)  {
int tmp;
cin>>tmp;

if (tmp)
niz.push_back(tmp);
else
break;
}

Re: Pomoc oko zadataka

PostPostao/la Heisenberg » 05 lip 2015, 15:38

Bi li mogao implementirat svoju ideju u gore napisani kod i c/p pravu verziju?

I da, zaboravio sam napisati u pocetku.
Koristim C++, program: Visual Studio 2013
He who dares, wins.

Re: Pomoc oko zadataka

PostPostao/la gagiD » 05 lip 2015, 17:38

Heisenberg je napisao/la:Bi li mogao implementirat svoju ideju u gore napisani kod i c/p pravu verziju?

I da, zaboravio sam napisati u pocetku.
Koristim C++, program: Visual Studio 2013


Pa isto je.
Prvo dadaj ukljuci vektor.
cpp code
#include <vector>


Deklaracija niza:
cpp code
vector<int> niz;


Svoju prvu for petlju zamjenis s while.

A u drugoj for petlji uslov zaustavljanja je i < niz.size()

Re: Pomoc oko zadataka

PostPostao/la edin » 31 srp 2015, 09:21

Cao,

Ispod je prvi primjer u c-u, ako nekom zatreba, iostream je zamjenjen sa stdio.h, cin sa sscan_s i cout sa printf. Za unos elemenata koristi se lista koja je opisana sa dvije strukture "node" i "list", node je element liste, dok list struktura sadrži pointer na prvi i zadnji element u listi. Za rad sa listom koriste se funkcije list_init, list_add, list_search i list_destroy. Obično je prvi parametar funkcije pointer na strukturu sa kojom radi npr. list_add(list *list, int value).

Funkcija list_add alocira novi node i dodaje na kraj liste, u slučaju da lista prazna head i tail pointeri se postavljaju da pokazuju na novi element, ako već postoji element u listi, onda se zadnji element postavi da pokazuje na novi element (list->tail->next = node), i tail liste se modifikuje da pokazuje na novi element (list->tail = node).


cpp code
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

struct node {
int value;
node* next;
};

struct list {
node* head;
node* tail;
};

void list_init(list *list) {
list->head = NULL;
list->tail = NULL;
}

void list_add(list *list, int value) {
node *item = new node();
item->value = value;
item->next = NULL;

if (list->head == NULL) {
list->head = item;
list->tail = item;
} else {
list->tail->next = item;
list->tail = item;
}
}

void list_destroy(list *list) {
node *cur = list->head;
while (cur != NULL) {
node *next = cur->next;
delete cur;
cur = next;
}
}

int list_search(list *list, int value) {
int i = 0;
for (node* it = list->head; it != NULL; it = it->next) {
if (it->value == value) return i;
++i;
}
return -1;
}

int _tmain(int argc, _TCHAR* argv []) {

list list;
list_init(&list);

int broj = 0;
int i = 0;

while (true) {
printf("Unesite %d broj:", ++i);
scanf_s("%d", &broj);
if (broj == 0) break;
list_add(&list, broj);
}

printf("Unesite broj koji trazite:");
scanf_s("%d", &broj);

int index = list_search(&list, broj);
list_destroy(&list);

if (index != -1) {
printf("Broj je pronadjen na poziciji: %d\n", index +1);
} else {
printf("Broj nije pronadjen!\n");
}
system("pause");
return 0;
}


5 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.