Datuve :: Forums :: Arhīvs :: palīdzat ar c++

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 71

Reģistrētie lietotāji online: 0

Viesi online: 71

Datuve.lv video
Top.LV

palīdzat ar c++

Ievietoja: pe4s @ 2011.10.04 21:38  

Tātad jāuzraksta programma, kas izvada visus 6-ciparu palindromus.
Ir ideja, ka jāpielieto gadījuma skaitļu ģenerācija.

Piemēram, šī izģenerē 10 skaitļus intervālā 0-99.

#include <iostream>
#include <ctime>
using namespace std;

int main()
{  
   time_t t;
   srand((unsigned) time(&t));
   
   for(long i=0; i<10; i++)
       cout << rand() % 100<< endl;

  system("pause");
  return 0;
}

Un pielietojot šo var izģenerēt arī 6-ciparu skaitļus:

#include <iostream>
#include <ctime>
using namespace std;

int main()
{  
   time_t t;
   srand((unsigned) time(&t));
   
   for(long i=1000000; i<999999; i++)
       cout << rand() % 1000000<< endl;

  system("pause");
  return 0;
}

Bet, kur un kā jāieliek komanda, lai izvada nevis visus 6-ciparu skaitļus, bet gan tieši palindromus?

Komentāri:

#1 jjanis @ 2011.10.04 22:34

nekādi gadījuma skaitļi, sviests!!!

sāc ar to, ka uzraksti funkciju, kas noskaidro vai 6-ciparu skaitlis ir palindroms

bool isPalindrome(int x){
char c[6];
sprintf(c,"%d",x);
if (c[0]==c[5] && c[1] ==c[4] && c[2] == c[3]){
return true;
}
return false
}

un iekš main vnk pārskaiti visus skaitļus un pārbaudi, tipa

for (int i=100000;i<1000000;i++){
if (isPalindrome(i){
cout<<i<<endl;
}
}

atvainojos, ja sintakse mazliet neprecīza, kā ari jāiekļauj dažas bibliotekas lai sprintf un cout strādātu, bet tas arī viss, principā 8 klases uzdevums... :)

#2 jjanis @ 2011.10.04 22:36

vai arī vari pārskaitīt visus skaitļus no 100 līdz 999 ieskaitot un tiem beigās pielikt to pašu skaitli no otra gala, arī iegūsi visus 6-ciparu palindromus...

#3 pe4s @ 2011.10.05 09:05

bet nevar šo visu kaut kā vienkāršāk uzrakstīt?

#4 Marshal @ 2011.10.05 09:47

Tas ir C++. Vienkārši te nevar. :)

#5 karuuzo @ 2011.10.05 11:23

Tas ir vienkārši :) Parādiet man programmēšanas valodu, kurā šo var uzrakstīt vienkāršāk? Valoda, kurai ir bibliotēka ar iebūvētām palindromu funkcijām, neskaitās.

m

PS. Nekad nelietot system izsaukumus tādām muļķībām. priekš tam ir:
cout <<"Press any key to continue..." << endl;
getch();

#6 Whatever @ 2011.10.05 12:15

Vienkāršāk/īsāk par šo vairs nesanāks. Nepieciešamās bibliotēkas pieliksi pats.

for (int i1=1;i1<10;i1++) {
 for (int i2=0;i2<10;i2++) {
   for (int i3=0;i3<10;i3++) {
     cout<<i1<<i2<<i3<<i3<<i2<<i1<<endl;
   }
 }
}
cout <<"Press any key to continue..." << endl;
_getch();

#7 jjanis @ 2011.10.05 12:23

ja gribās pamežģīt smadzenes ar rekursiju:

void doPalindrome(int data){
 cout<<data/100<<data/10<<data%10<<data%10<<data/10<<data/100;
 if (++data<1000)
   doPalindrome(data);
}

int main(){
 doPalindrome(100);
}

#8 pe4s @ 2011.10.05 15:10

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
   
for (int i1=1;i1<10;i1++) {
for (int i2=0;i2<10;i2++) {
  for (int i3=0;i3<10;i3++) {
    cout<<i1<<i2<<i3<<i3<<i2<<i1<<endl;
  }
}
}
cout <<"Press any key to continue..." << endl;
_getch();

   system("pause");
   return 0;
}    

Problēma tāda, ka izvada tikai palindromus no 702207, bet kā lai izvada tos, kas ir pirms tam, 701107 utt.?

#9 karuuzo @ 2011.10.05 15:39

Tā nav problēma, bet konsoles ierobežojums. aizstāj cout ar:
cout<<i1<<i2<<i3<<i3<<i2<<i1<<";";

un būs drusku vairāk ;)

m

PS. Un novāc to system pause. Ja es tev pasniegtu C++, par tādu joku būtu 2 un sēdies ;)

#10 pe4s @ 2011.10.05 15:53

Liels paldies, tagad viss iet ;)
Skatos šeit ir cilvēki, kas var izpalīdzēt, jo nu es tik nepasen sāku kaut ko rubīt no C++ :D
Ir vēlviens uzd:
Jāuzraksta spēli. Programma izdomā skaitli intervālā 0 – 100. Lietotājam to skaitli ir jāuzmin ievadot minēšanas variantus uz klaviatūras. Pēc katra mēģinājuma programma izvada vienu no trim ziņojumiem:
“skaitlis ir lielāks par ievadīto”
“skaitlis ir mazāks par ievadīto”
“skaitlis uzminēts no N mēģinājuma”
Maksimāls mēģinājumu skaits – 10. Ja skaitlis nebija uzminēts no 10 mēģinājumiem programmai jāizvada ziņojumu:
“Jūs zaudējat! Pareizā atbilde N”

Pagaidām neesmu tālu ticis, bet ganjau, ka daudzkas nav pareizi un jāpieraksta programma, kas ļauj veikt 10 mēģinājumus:
#include <iostream>
using namespace std;

int main()
{
   double n;

   cout << "Input n: ";
   cin >> n;

   int x;
   for(int i=0; i<100; i++)
{
if (n > x)
{
   if (n > x)
   {
       cout << "Skaitlis ir lielaks par ievadito" << endl;
   }
   else // n < x
   {
       cout << "Skaitlis ir mazaks par ievadito" << endl;
   }
}
else
{
   if (n = x)
   {
       cout << "Skaitlis uzminets no " << "N: " << "meginajuma" << endl;
   }    
   else // n != x
   {
       cout << "Jus zaudejat! Pareiza atbilde " << "N: " << endl;
   }
}
}
  system("pause");
  return 0;
}

#11 Whatever @ 2011.10.05 17:08

Skaidrs, ka ar programmēšanu Tu dzīvē iztiku nepelnīsi. ;) Bet nekas, gan jau citā jomā Tev veicas labāk..

void playTheGame()
{
  srand( (unsigned)time( NULL ) );
  int myNumber = (rand()%101);

  for (int tries=1;tries<11;tries++) {
     int enteredNumber;
     cout << "Ievadiet skaitli: ";
     cin >> enteredNumber;
     if (enteredNumber == myNumber) {
        cout << "Skaitlis uzminets no " << tries << ". meginajuma" << endl;
        return;
     } else {
        cout << "Skaitlis ir " << ( myNumber > enteredNumber ? "lielaks" : "mazaks") << " par ievadito" << endl;
     }
  }
  cout << "Jus zaudejat! Pareiza atbilde: " << myNumber << endl;
}

EDIT: tabs vs. spaces

#12 pe4s @ 2011.10.05 18:14

Un kāpēc man tagad c++ piesienas pie system pause? :D
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
   
void playTheGame()
{
 srand( (unsigned)time( NULL ) );
 int myNumber = (rand()%101);

 for (int tries=1;tries<11;tries++) {
    int enteredNumber;
    cout << "Ievadiet skaitli: ";
    cin >> enteredNumber;
    if (enteredNumber == myNumber) {
       cout << "Skaitlis uzminets no " << tries << ". meginajuma" << endl;
       return;
    } else
    {
       cout << "Skaitlis ir " << ( myNumber > enteredNumber ? "lielaks" : "mazaks") << " par ievadito" << endl;
    }
 }
 cout << "Jus zaudejat! Pareiza atbilde: " << myNumber << endl;
}
   system("pause");
   return 0;
}

#13 jjanis @ 2011.10.05 18:41

pe4s rakstīja:

Un kāpēc man tagad c++ piesienas pie system pause? :D
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
   
void playTheGame()
{
 srand( (unsigned)time( NULL ) );
 int myNumber = (rand()%101);

 for (int tries=1;tries<11;tries++) {
    int enteredNumber;
    cout << "Ievadiet skaitli: ";
    cin >> enteredNumber;
    if (enteredNumber == myNumber) {
       cout << "Skaitlis uzminets no " << tries << ". meginajuma" << endl;
       return;
    } else
    {
       cout << "Skaitlis ir " << ( myNumber > enteredNumber ? "lielaks" : "mazaks") << " par ievadito" << endl;
    }
 }
 cout << "Jus zaudejat! Pareiza atbilde: " << myNumber << endl;
}
   system("pause");
   return 0;
}

Iemācies lasīt kompilatora ziņojumus, acīmredzami Tev pirms system("pause") ir lieka aizverošā figūriekava, kas beidz funkciju... :)

#14 pe4s @ 2011.10.05 18:54

Tagad ar return kaut kas ne tā.
Un pietam vēl jāizdomā viss no otras puses. Man jāizdomā skaitlis un programmai ir jāuzmin skaitli no 10 mēģinājumiem.

#15 jjanis @ 2011.10.05 19:54

funkcija ar tipu viod nevar atgriezt vērtību, Tu varētu vēlēties to pārsaukt par int main()...

#16 pe4s @ 2011.10.05 20:08

Paldies, pārlaboju dažas lietas un tagad viss ok :)
Var kāds palīdzēt ar to programmu, kuru paskaidroju #14 ?

#17 kerhong @ 2011.10.05 21:31

Palīdzība ar #14:
http://en.wikipedia.org/wiki/Binary_search_algorithm

#18 pe4s @ 2011.10.05 21:37

nu jā, tas neko daudz nedod :/ bet paldies par to pašu, varbūt ir vēl kādi varianti?