Кодот ти работи заради тоа што компајлерот , и без ти да напишеш твој оператор , ти прави “генерички“ оператор = .Ај нид хелп аген
Следниот код пример за употреба на преоптоварениот операторот за доделување, но кодот работи и без тој дел од кодот, т.е кода ќе го искоментирам делчето каде што се врши преоптоварувањето на операторот пак се нормално функционира. Знае ли некој зошто?
Претпоставував дека функционира генерички оператор за доделување. Ajifos* и сам кажа дека кодот функционира. Идејата ми беше да укажам на грешките во кодот за да го доловам начинот на кој се оптоварува оператор.Кодот ти работи заради тоа што компајлерот , и без ти да напишеш твој оператор , ти прави “генерички“ оператор = .
тој генерички оператор не се гледа во кодот , ама работи исто како и кодот што ти си го напишал , имено , иде бит по бит ,и се што има во едната класа го копира СКРОЗ ИСТО како и во оригиналната класа. Ова работи добро се додека не почнеш да работиш со покажувачи.
така да се додека во класата не користиш полажувачи нема никаква потреба да правиш свои оператори .
@Lucifer Sam
не викам дека оригиналниот код му е добар, ти како што кажа е правилно, ама и без твоите поправки кодот работи.
едино што нема да може он да прави со неговата верзија на кодот би било :
Class A , B , C ;
A=B=C ;
int num,r,sum=0,temp;
printf("Vnesi broj: ");
scanf("%d",&num);
temp=num;
while(num){
r=num%10;
num=num/10;
sum=sum*10+r;
}
if(temp==sum)
printf("%d e palindrom",temp);
else
printf("%d ne e palindrom",temp);
return 0;
}
Фала другарПалиндром ти е и 121,151, 1221, 56065, 123321, .. итн
Код:int num,r,sum=0,temp; printf("Vnesi broj: "); scanf("%d",&num); temp=num; while(num){ r=num%10; num=num/10; sum=sum*10+r; } if(temp==sum) printf("%d e palindrom",temp); else printf("%d ne e palindrom",temp); return 0; }
if(mесеc==1 || mесеc==3 || mесеc==5 || mесеc==7 || mесеc==8 || mесеc==10 || mesec==12)
{
printf("31 den");
}
else if(mesec==4 || mesec==6 || mesec==9 || mesec==11)
{
printf("30 dena");
}
else if(mesec==2)
{
printf("28 ili 29 dena");
}
else
{
printf("Pogresen broj! Vnesi broj pomegu (1-12).\n");
}
printf ("Vnesi godina: \n");
scanf ("%d", &godina);
if ((godina%400==0)||((godina%4==0)&&(godina%100!= 0)))
printf ("Godinata e prestapna: \n");
else
printf ("Godinata ne e prestapna: \n");
return 0;
}
Кога бев прва на ФЕИТ многу потешки лабораториски имавме, затоа прашувамНа ФИНКИ е 100%
#include <bits/stdc++.h>
using namespace std;
int main(){
int k,n,index,indexmal,najgolem=0,najmal=1000001;
cin >> n >> k;
int A[n],B[n];
for(int i=0;i<n;i++)
{
cin >>A[i];
B[i]=0;
}
for(int i=0;i<k;i++){
for(int j=0;j<n;j++){
if(A[j]>najgolem)
{
najgolem=A[j];
index=j;
}if(A[j]<najmal && A[j]!=0){
najmal=A[j];
indexmal=j;
}
}
B[indexmal]=A[index];B[index]=A[indexmal];
A[index]=0;A[indexmal]=0;
najgolem=1;najmal=1000001;
}
for(int i=0;i<n;i++){
if(B[i]==0){
if(i==n)
cout << A[i];
else
cout << A[i] <<" " ;
}else{
if(i==n)
cout << B[i];
else
cout << B[i] <<" " ;
}
}
}
Моменталното решение ти работи со сложеност О(K*N) и не е доволно брзо да ги помине поголемите тест примери. Постои решение кое работи побрзо. Како хинт, почни да размислуваш за сортирање на низатаДечки задача од мендо:http://mendo.mk/Task.do?id=617
Ми дава 15/20 другите се надминат временски лимит.Код:#include <bits/stdc++.h> using namespace std; int main(){ int k,n,index,indexmal,najgolem=0,najmal=1000001; cin >> n >> k; int A[n],B[n]; for(int i=0;i<n;i++) { cin >>A[i]; B[i]=0; } for(int i=0;i<k;i++){ for(int j=0;j<n;j++){ if(A[j]>najgolem) { najgolem=A[j]; index=j; }if(A[j]<najmal && A[j]!=0){ najmal=A[j]; indexmal=j; } } B[indexmal]=A[index];B[index]=A[indexmal]; A[index]=0;A[indexmal]=0; najgolem=1;najmal=1000001; } for(int i=0;i<n;i++){ if(B[i]==0){ if(i==n) cout << A[i]; else cout << A[i] <<" " ; }else{ if(i==n) cout << B[i]; else cout << B[i] <<" " ; } } }
Да барам нов начин на решавање или може ова решение да помине ?
Благодарам однапред.