C/C++

Член од
9 август 2007
Мислења
261
Поени од реакции
56
aj ако може некој да ја реши задачава со покажувачи во Ц.. да се напише функција која прима две текстуални низи како аргументи. низите да се споредат така што знаците кои се совпаѓаат во двете низи да се заменат со * .
пример:
прва низа: Jas sum prva niza
втора низа: Zadaca2 po programiranje..
да се добие:
J*s sum**rva niz*
Z*daca2**o progr*miranje
p1=niza1,p2=niza2; int i=0,while(i<MIN(strlen(niza1),strlen(niza2))){ if (*p1==*p2) *p1='*',*p2='*'; *p1++;*p2++;i++;}
 
Член од
13 јуни 2008
Мислења
92
Поени од реакции
0
а дали може вака..

int funkcija(char *x, char *y)
{
int i=0,brojac=0;
while((*(x+i)!='\0') && (*(y+i)!='\0'))
{
if(*(x+i)==*(y+i))
{
*(x+i)='*';
*(y+i)='*';
brojac++;
}
i++;
}
return brojac;
}
 
Член од
5 јуни 2008
Мислења
3.632
Поени од реакции
5.724
а дали може вака..

int funkcija(char *x, char *y)
{
int i=0,brojac=0;
while((*(x+i)!='\0') && (*(y+i)!='\0'))
{
if(*(x+i)==*(y+i))
{
*(x+i)='*';
*(y+i)='*';
brojac++;
}
i++;
}
return brojac;
}
Па да, само јас користам for(i=0; i<strlen(x); i++) {...}
Mислам дека наместо && тееба || да ставиш во while, зошто доволно е да се дојде до крајот на едната низа кога се прави споредба.
 
Член од
6 јуни 2009
Мислења
3.094
Поени од реакции
445
а дали може вака..

Код:
int funkcija(char *x, char *y)
{
  int i=0,brojac=0;
  while((*(x+i)!='\0') && (*(y+i)!='\0'))
    {
      if(*(x+i)==*(y+i))
      {
        *(x+i)='*';
        *(y+i)='*';
        brojac++;
      }
      i++;
    }
    return brojac;
}
А зошто користиш аритметика на покажувачи кога можеш со индекси. x е еквивалентно со *(x+i), само многу почитливо.
Ако навистина сакаш со аритметика на покажувачи, тогаш може да се реши малку поефикасно и со почист код
Код:
int funkcija(char *x, char *y)
{
	int brojac=0;
	while((*x != '\0') && (*y != '\0'))
	{
		if(*x == *y)
		{
		*x='*';
		*y='*';
		brojac++;
		}
		x++; y++;
	}
	return brojac;
}

Па да, само јас користам for(i=0; i<strlen(x); i++) {...}
Mислам дека наместо && тееба || да ставиш во while, зошто доволно е да се дојде до крајот на едната низа кога се прави споредба.
Во ред му е решена само нејасно напишано, подобро е со индекси. А во условот за While треба &&, значи се тера циклусот се дури и двата знаци не се '\0', ако барем еден е, сме дошле до крајот на пократкиот стринг и прекинуваме. Со || може да се направи ама со негација однапред. !(x=='\0' || y=='\0'). Нели во while условот ни кажува дали да се изврши, а не кога да прекини (пример како кај циклусот repeat ... until во паскал), затоа таа негацијата.

А да, не ти препорачувам да користиш во for i<strlen(x) затоа што така на секоја проверка на овој услов се повикува strlen која го изминува стрингот од почеток и ја бара нулата за крај на стринг, па така всушност би добил квадратно изминување. Вчитај ја должината во променлива пред for циклусот.
 
Член од
1 февруари 2011
Мислења
6
Поени од реакции
0
Знае некој како можам да манипулирам со кирилични текс фајлови.
Однапред Благодарам.позз
 
Член од
29 април 2010
Мислења
66
Поени од реакции
3
Помош-Програма во C++

Ако сака некој да ми помогне или пак да ја напише целата задача во програмскиот јазик C++ Навидум изгледа лесна задача меѓутоа бидејќи јас сум почетник во програмирањето не успеав да ја напишам точно сам, вака е задачата -Да се внесат било кои 10 броја и од тие броеви да се најде најголемиот од нив. Фала однапред за вашата помош:smir:
 

vmx

Член од
25 април 2005
Мислења
5.633
Поени од реакции
201
#include <iostream.h>
main ()
{
int a[10];
int sum=0;
int max;
for (i=0; i<10; i++)
{
cin<<a;
}
max=a[0];
for (i=0; i<10; i++)
{
sum=sum+a;
if(a>max) max=a;
}
sum=sum+max;
cout<<sum;
}

На факс имав слична задача на твојата, така да вака би требало да изгледа тоа што го бараш. :)
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.153
Поени од реакции
5.921
Код:
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
	int a, max=-9999;
	cout << "Vnesete 10 broevi: " << endl;
	for(int i=1; i<=10; i++)
	{
		cout << "Broj " << i << ": " << endl;
		cin >> a;
		if(a>max)
			max=a;
	}
	cout << "Najgolemiot broj e " << max << endl;
	system("pause");
}
 
A

apidrone

Гостин
Мене ме интересира како би се направило ова ако не се знае колку броја треба да се внесат. Знам дека во С може со while(scanf...), ама не знам дали може истото и во С++.
 
Член од
18 јули 2010
Мислења
278
Поени од реакции
177
Не е лошо да си научиш еден алгоритам за сортирање многу лесно ќе ти биде после. Ти препорачувам или тој со меурче или тој со минимален и максимален за сортирање.

Мене ме интересира како би се направило ова ако не се знае колку броја треба да се внесат. Знам дека во С може со while(scanf...), ама не знам дали може истото и во С++.
Секогаш мора да се знае колку броја ќе се внесат. Тоа може да биде дадено како константа, потоа првата променлива да означува колку броја ќе се внесат или со некој услов за прекин на пример се додека не се внесе 0 или 9999 како вредност.
Мора да има услов за прекин на циклусот за внесување!
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Мене ме интересира како би се направило ова ако не се знае колку броја треба да се внесат. Знам дека во С може со while(scanf...), ама не знам дали може истото и во С++.
Еве ти еден пример, претпоставувам за ова мислеше:

Код:
#include <iostream>
#include <string>

using namespace std;

// Оваа функција враќа низа без NULL елементи
// Влезни параметри, привремената низа од која ќе зима податоци и бројот на елементи кој треба да го содржи 
string *toSizedArray(string *str, const int len) {
	string *s = new string[len];
	int i = 0;
	while(i != len) { s[i] = str[i]; i++; }
	return s;
}

int main() {

	// Дефинираш привремена низа која ќе ја полниш додека корисникот внесува вредности
	const int size = 255;
	string *tmparr = new string[size];

	int i = 0;
	string tmp = "";

	// Кога нема да внесеш ништо (кога ќе стиснеш ентер без да пишеш нешто) циклусот престанува
	do {
		getline(cin, tmp);
		tmparr[i] = tmp;
		i++;
	} while (!tmp.empty());

	// И сега ова ти е новата низа која има онолку елементи колку што корисникот внел податоци
	string *myarray = toSizedArray(tmparr, i);

	// Тука ја печатиш низата
	cout << "\nNizata e:\n";
	for(int j=0; j<i; j++) { cout << myarray[j] << endl; }
	cout << "Kraj...\n";

	cin.get();
	cin.get();
}
Има и други начини, али тие се малце поадвансед, со користење на темплејти и такви чуда, али како и да е, шансите дека ќе ти затреба ова некогаш во иднина се 1 према ... да речеме 10.000 :)
 
Член од
16 јануари 2011
Мислења
11
Поени од реакции
0
Дали во C++ постои lenght на int варијабла? Доколку не дали некој знае како да ограничам внесување само на двоцифрени броеви? :)
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Аман бе друже :)

Код:
if(br > 9 && br < 100) {
// Ok
} else {
// Ne e ok
}
 

Kajgana Shop

На врв Bottom