C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
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++;}
 
а дали може вака..

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;
}
 
а дали може вака..

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, зошто доволно е да се дојде до крајот на едната низа кога се прави споредба.
 
а дали може вака..

Код:
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 циклусот.
 
Знае некој како можам да манипулирам со кирилични текс фајлови.
Однапред Благодарам.позз
 
Помош-Програма во C++

Ако сака некој да ми помогне или пак да ја напише целата задача во програмскиот јазик C++ Навидум изгледа лесна задача меѓутоа бидејќи јас сум почетник во програмирањето не успеав да ја напишам точно сам, вака е задачата -Да се внесат било кои 10 броја и од тие броеви да се најде најголемиот од нив. Фала однапред за вашата помош:smir:
 
#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;
}

На факс имав слична задача на твојата, така да вака би требало да изгледа тоа што го бараш. :)
 
Код:
#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");
}
 
Мене ме интересира како би се направило ова ако не се знае колку броја треба да се внесат. Знам дека во С може со while(scanf...), ама не знам дали може истото и во С++.
 
Не е лошо да си научиш еден алгоритам за сортирање многу лесно ќе ти биде после. Ти препорачувам или тој со меурче или тој со минимален и максимален за сортирање.

Мене ме интересира како би се направило ова ако не се знае колку броја треба да се внесат. Знам дека во С може со while(scanf...), ама не знам дали може истото и во С++.

Секогаш мора да се знае колку броја ќе се внесат. Тоа може да биде дадено како константа, потоа првата променлива да означува колку броја ќе се внесат или со некој услов за прекин на пример се додека не се внесе 0 или 9999 како вредност.
Мора да има услов за прекин на циклусот за внесување!
 
Мене ме интересира како би се направило ова ако не се знае колку броја треба да се внесат. Знам дека во С може со 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 :)
 
Дали во C++ постои lenght на int варијабла? Доколку не дали некој знае како да ограничам внесување само на двоцифрени броеви? :)
 

Kajgana Shop

Back
На врв Bottom