» »

[C++] vprašanja

[C++] vprašanja

ulms ::

A kdo ve kje bi se dalo dobit Dos prevajalnika za MS Visual C++. :\


Marsovec

Mmm'Aah ::

Torej hočeš DOS prevajalnik za C++... (MS Visual C++ je že sam prevajalnik in IDE in svašta zraven). Po-google-aj za "DOS C++ compiler", te bo kr obsul z zadetki.

Bojevnik ::

switch(ch) {
             case 'a': {cout<<'1';}
             case 'b': {cout<<'2';}
             case 'c': {cout<<'3';}
             case 'č': {cout<<'4';}
             case 'd': {cout<<'5';}
             case 'e': {cout<<'6';}
             case 'f': {cout<<'7';}
             case 'g': {cout<<'8';}
             case 'h': {cout<<'9';}
             case 'i': {cout<<'0';}
             default : {}
             }


A je tuki kej narobe, ker ko naprimer vnesem a, mi izpiše 1234567890, ce c pa 34567890 itd..., uporabljam Dev-C++ 5 beta

Zgodovina sprememb…

  • spremenilo: Bojevnik ()

Quikee ::

manjkajo ti break; v vsakem case

recimo:
case 'a':
...
break;

case 'b':
...
break;

V nasprotnem primeru ce ni break; ti kr nadaljuje v druge case-e.

BigWhale ::

cout << "1" ... break;

Zgodovina sprememb…

  • spremenil: BigWhale ()

Bojevnik ::

ql, dela hvala!

fx ::

Kako pogledam, če sem miško premaknil z C++?

Lp

Gundolf ::

Hmm, jaz ponavadi miško premikam z roko, tako da ti ne znam pomagat tu. Podnapis: Nimam pojma kaj sprašuješ.

Zgodovina sprememb…

  • spremenil: Gundolf ()

fx ::

Želim narediti ohranjevalnik zaslona in ko bi premaknil miško bi se mi program zaprl.

Lp

CCfly ::

Nasvet si že dobil in sicer uporabi SDL, Win32, Xlib, ... Poleg tega te naprošam, da ne zastavljaš enakih vprašanj v treh različnih temah.
"My goodness, we forgot generics!" -- Danny Kalev

Senitel ::

Itak dobiš WM_MOUSEMOVE windows message, ko se miš premakne, ni treba kaj dosti komplicirat s tem.

iNN ::

Zivijo!

Problem: Potegnil sem si Razvijalno okolje Dev c++, v soli delamo v Borlandu, in ko sem hotel doma skompajlat source k sem ga napisal v soli (igrica vislice), in ni delovalo :o, nato sem nahitro napisal se en programcek k ti izpise "hello world" in stvar je delovala. Mislim da je to stvar prevajalnika. Kaj je resitev? Prosim za pomoc.

aja btw, v soli so vislice delovale!!!
==

iNN ::

aja verzija programa je pa
February 21th 2005 : Dev-C++ 5 Beta 9.2 (4.9.9.2) released !
==

Gundolf ::

Lažje bi bilo, če bi povedal kaj ni delovalo (prevajanje / linkanje - točen error + po malo kode ali izvajanje). Lahko da si pisal nekompatibilno kodo, lahko da nisi pravilno nastavil dev++ a ali pa kaj čisto tretjega.

iNN ::

Ja torej, evo programcek ki dela v borlandu, tukaj pa ne dela, aja kot sem ze napisal je problem v kompajlanju
klik

Tocno mi oznaci error pri stavku, ki je cetrti po vrsti navzdol od maina, torej cout (izhodni tok) "vnesi besedo in pritisni SPACE ... tukaj, torej v cem je lahko problem?
==

OwcA ::

Kaksno napako pa dobis?

Verjetno je težava v tem, da ne razrešuješ imenskih prostorov. cout je v std.

Lepo je tudi, če vsako pisanje na ostream zaključiš z std::endl, funkciji main določiš tip (int) in na koncu vrneš 0.
Otroška radovednost - gonilo napredka.

kihc ::

Poleg tega je problem da če se ne motim funkcija gotoXY() deluje samo v borlandovih compilerjih.
x

iNN ::

heh :8) sej me je kr sram napisat, ampak useen. :), v soli smo imel lansko leto prfoksa k se sam ni znal dobr c++ ... pa je nas ucil;(( , in je reku da nima veze ce so knjiznice (primer: iostream) z .h oz brez koncnice .h, torej tukaj so bile brez :) Ko sem jih sedaj dodal, program deluje =)

Aja, kaj je sploh fora k koncnici, oz zakaj borland prepozna knjiznice brez koncnice, dev-c++ pa ne?
==

Zgodovina sprememb…

  • spremenilo: iNN ()

OwcA ::

Brez je bilo že čisto prav.
Otroška radovednost - gonilo napredka.

iNN ::

Ja potem pa jaz ne razumem.
==

iNN ::

...da ne razrešuješ imenskih prostorov. cout je v std.....

...na ostream zaključiš z std::endl...

Mi lahko tole malo bolj razlozis ?
==

OwcA ::

Otroška radovednost - gonilo napredka.

iNN ::

Glede tistega prej z knjiznicami, ce imam iostream.h mi normalno skompajla ... ce imam samo iostream mi oznac prvi cout in tako naprej.
==

OwcA ::

iostream.h je zastarelo.
Otroška radovednost - gonilo napredka.

Gundolf ::

iostream.h je zastarelo. iostream je novo. Borland ima očitno neke svoje pojme na tem področju ampak če uporabljaš iostream (brez končnice) potem nimaš cout ampak std::cout. Oziroma na začetku napišeš using namespace std pa bo isto. V bistvu si imel ti napačno kodo, ki jo je borland vseeno sprejel. Zaradi takih stvari se potem folk čisto pravično pritožuje čez C++. Take prfoxe pa tud, khmm, raje ne bom rekel kaj. Ampak čisto tipično za naš šolski sistem.

iNN ::

:D :D
==

fx ::

Ponovno sem se vrnil k RSA algoritmu. Samo imam en mali problemček.

e*d = 1(mod (p-1)*(q-1)), kako naj obravnavam mod funkcijo ko želim izračunati d. Želim e spravit na desno stran, ker c++ verjetno ne ve tako računat, kako je napisana formula.

Lp,

OwcA ::

Trotel ziher način je, da daš vse kar je zdaj na desni v oklepaj in potem deliš z e.
Otroška radovednost - gonilo napredka.

Gundolf ::

No ne glih:D
Najbolje da si najdeš kje napisan dejanski algoritem za RSA (psevdokoda), ker tole formulo je treba še močno premetat naokol, preden rata algoritem.

Edit: Recimo, na prva dva pogleda zelo lepo razložen algoritem.

Zgodovina sprememb…

  • spremenil: Gundolf ()

fx ::

Gundolf hvala za link.
D se lahko izračuna na ta način
d = (((p-1)*(q-1)+1)/e)
V obeh primerih bo prišel isti rezulat. Ta zadnji pa je tudi preprost za račuanje.

Moje ugotovitv je da za pravilno delovanje RSA algoritma je da sta p in q praštevili in da je e med 1 in (p-1)*(q-1) in morata imeti e in (p-1)*(q-1) največji skupni deljitel (GCD) 1.

Lp,

Zgodovina sprememb…

  • spremenil: fx ()

Gundolf ::

fx, takole na pamet ne bi rekel, da je tvoja formula pravilna. Ne trdim da ni, ampak do sedaj sem za izračun d vedno videl le uporabo razširjenega Evklidovega algoritma. Po moje sploh ni nujno, da ti ta formula vrne celo število.

Če bi bila ta formula pravilna, potem ne vem zakaj za vraga bi se kdo matral z evklidom.

fx ::

Gundolf samo moj program dobro del, ker na tem linku mi ven isto vse vrže kot moj program. Pa še p,q in e moraš taki najt, ker ni vsaka številka dobra.

Lp,

Gundolf ::

Ja ok pol.

fx ::

RSA sem spravil pod streho (upama vsaj). Sedaj pa k naslednjemu koraku, naredit komunikacijo server/odjemalec preko TCP ali UDP. Zanima me če je kaki .h pod ANSI za moj primer?.
Ali moram sam napisati ali copy&past.

Lp,

Zgodovina sprememb…

  • spremenil: fx ()

fx ::

Vse sem našo, sedaj me samo nekaj zanima kako dva chara take oblike
char *Name = new char[128];
spravim v enega? samo mora biti take oblike.

Lp,

fx ::

#include <cstdlib>
#include <string>
#include <iostream>

char *Construct(char *Name = new char[30] , char *Text = new char[256])
{
    char *assistant;
    system("cls");
    assistant = "[";
    std::cout << assistant << std::endl;
    strcat(assistant, Name);   //zapre program
    std::cout << assistant << std::endl;
    strcat(assistant, "] ");
    std::cout << assistant << std::endl;
    strcat(assistant, Text);
    std::cout << assistant << std::endl;
    return assistant;
}

int main()
{
    char *Name = new char[30];
    char *SendText = new char[256];
    std::cout << "Your name : ";
    std::cin.getline(Name, 30, '\n');
	while(true)
	{
  		std::cout << "[" << Name << "] ";
		std::cin.getline(SendText, 256 , '\n');
		if(strcmp(SendText, "/exit") == 0)
			return 0;
		SendText = Construct(Name,SendText);
		delete[] SendText;
	}
	return 0;
}



Kaj sem narobe naredil, da mi ga zapre

Lp,

Gundolf ::

Nisi alociral pomnilnika zanjga.

Kaj se zanalašč mučiš s char* in iz principa nočeš uporabiti stringov? Ker pretvorba iz std::string v const char* je namreč povsem enostavna (če v kakšni funkciji od kake knjižnjice, ki jo uporabljaš, rabiš slučajno const char*).

fx ::

#include <cstdlib>
#include <string>
#include <iostream>

int main()
{
    std::string Name;
    std::string Text;
    std::cout << "Your nick : ";
    std::cin >> Name;
    Name = "[" + Name + "] ";    
    system("CLS");
	while(true)
	{   
  		std::cout << Name;
		std::cin >> Text;
		if(Text == "/exit")
			return 0;
		Text = Name + Text;
        char* SendText = const_cast<char*> (Text.c_str());
        std::cout << SendText << std::endl;
	}
	return 0;
}

To je to. Hvala Gundolf za namig. Se mi pozna da nisem dve leti C++ povohal.

CCfly ::

        Text = Name + Text;
        char* SendText = const_cast<char*> (Text.c_str());
        std::cout << SendText << std::end

// --- poof

        std::cout << Name + Text << std::endl;
"My goodness, we forgot generics!" -- Danny Kalev

fx ::

CCfly vem, ampak ta vrstice bo šla ven in bi prišla druga, katera pa bo na server oz. client poslal besedilo.

EDIT:
Za knjižnico kam bom poslal SendText pa potrebujem char*.

Lp,

Zgodovina sprememb…

  • spremenil: fx ()

fx ::

#include <cstdlib>
#include <string>
#include <iostream>

int main()
{
  std::string Name;
  std::string Text;
  std::cout << "Your nick : ";
  std::cin >> Name;
  Name = "[" + Name + "] ";    
  system("CLS");
  while(true)
  {   
    std::cout << Name;
    std::getline (std::cin,Text);
    if(Text == "/exit")
      return 0;
    else
      std::cout << Name + Text << std::endl;
  }
  return 0;
}

Zakaj mi program to naredi (jaz želim, da samo enega izpiše Fx):
Your nick: Fx
[Fx] [Fx]

Lp,

fx ::

#pragma warning(disable:4786)
#include <cstdlib>
#include <cstring>
#include <iostream>

int main()
{
  std::string Name;
  std::string Text;
  std::cout << "Tvoj vzdevek : ";
  std::cin >> Name;
  Name = "[" + Name + "] ";    
  while(true)
  {  
    std::getline(std::cin,Text,'\n');
    if(Text == "/exit")
      return 0;
    if (Text == "/cls")
      system("CLS"); //pobrise zaslon v win in *nix
    std::cout << Name;
  }
  return 0;
}


Program je kot mora biti. Dela na win in *nix OS.

Lp,

fx ::

Samo me nekaj zanima, a c++ ima kako funkcijo da omogoča da program leti v zanki tudi takrat ko vnašamo podatke? Ali bom moral uporabiti prekinitve?

Lp,

Zgodovina sprememb…

  • spremenil: fx ()

snow ::

Kaj pa niti (threadi)?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

fx ::

Funkcija :
send(sd, CharText, (int)strlen(CharText) + 1, 0);

potrebuje const char* uporabil sem to varjanto
char* CharText = const_cast<char*> (StringText.c_str());
in mi napako javi ko program zaženem, ko prevedem ne. Če naredim char CharText[256]; pa program normalno dela. Kaj narobe delam?

Lp,

OwcA ::

Saj že c_str() vrne const. Kar ti delaš je jemlješ stran const.
Otroška radovednost - gonilo napredka.

snow ::

Daj še potem uporabi StringText.size() namesto strlen :D
Se pravi:
send(sd, StringText.c_str(), StringText.size() + 1, 0);
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

fx ::

Koda za server
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <winsock.h>

int main(int argc, char *argv[])
{
 system("cls");
 system("color 0a");
 SOCKET client_sd;     /* Socket descriptor of client */
 SOCKET server_sd;     /* Socket descriptor of server */
 char ReadText[256];   /* Data received from client */
 unsigned short int port_number; /* Port number */
 int a1, a2, a3, a4;   /* Address numbers in xxx.xxx.xxx.xxx form */
 struct sockaddr_in server;  /* Information about the server */
 struct sockaddr_in client;  /* Information about the client */
 int client_length;    /* Length of the client information struct */
 WSADATA w;  /* Used for opening up Windows connection */
 char client_address[32]; /* Address of the client */
 
 std::string Name, Name_;
 std::string Text;
 
 /* Make sure there are three entries on the command line */
 if (argc != 4)
 {
  std::cout << "Usage: simpcli [server address] [port number] [nickname]" << std::endl;
  system("pause");
  exit(0);
 }
 
 /* Read the command line */
 if (sscanf(argv[1], "%d.%d.%d.%d", &a1, &a2, &a3, &a4) != 4)
 {
  std::cout << "Error reading address in xxx.xxx.xxx.xxx form." << std::cout;
  system("pause");
  exit(0);
 }
 
 if (sscanf(argv[2], "%u", &port_number) != 1)
 {
  std::cout <<  "Error reading port number." << std::endl;
  system("pause");
  exit(0);
 }
 
 if (sscanf(argv[3], "%s", &Name_) != 1)
 {
  std::cout <<  "Error reading nickname." << std::endl;
  system("pause");
  exit(0);
 }
 
 /* Open up the Windows connection. This is necessary before calling
 the other WinSock functions. */
 if (WSAStartup(0x0101, &w) != 0)
 {
  std::cout << "Could not open windows connection." << std::endl;
  exit(0);
 }
 
 /* Open up a TCP/IP socket. */
 server_sd = socket(AF_INET, SOCK_STREAM, 0);
 
 /* Make sure the socket was opened, and quit if not */
 if (server_sd == INVALID_SOCKET)
 {
  fprintf(stderr, "Could not create socket.\n");
  WSACleanup();
  exit(0);
 }
 
 /* Set up the information in the server information structs */
 
 /* Step 3a: Clear the memory in the server struct */
 memset((void *)&server, '\0', sizeof(struct sockaddr_in));
 
 /* Step 3b: Set the family of the server */
 server.sin_family = AF_INET;
 
 /* Step 3c: Set the port */
 server.sin_port = htons(port_number);
 
 /* Step 3d: Copy the server address into the struct */
 server.sin_addr.S_un.S_un_b.s_b1 = (unsigned char)a1;    
 server.sin_addr.S_un.S_un_b.s_b2 = (unsigned char)a2;
 server.sin_addr.S_un.S_un_b.s_b3 = (unsigned char)a3;
 server.sin_addr.S_un.S_un_b.s_b4 = (unsigned char)a4;
 
 
 /* Bind server address to socket */
 if (bind(server_sd, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) == -1)
 {
  std::cout << "Could not bind address to socket." << std::endl;
  closesocket(server_sd);
  WSACleanup();
  exit(0);
 }
 
 /* Print out some information */
 std::cout << "Server running on " << argv[1] << std::endl;
 std::cout << "Press CTRL + C to terminate the server." << std::endl;
 
 /* Listen for connections */
 listen(server_sd, 3);
 
 /* Step 6a: Accept the client */
 client_length = (int)sizeof(struct sockaddr_in);
 if ((client_sd = accept(server_sd, (struct sockaddr *)&client, &client_length)) == -1)
 {
  std::cout << "Could not accept client." << std::endl;
  closesocket(server_sd);
  WSACleanup();
  exit(0);
 }
 
  /* Step 6b: Get the client's address */
  sprintf(client_address, "%d.%d.%d.%d", (unsigned char)client.sin_addr.S_un.S_un_b.s_b1, 
     (unsigned char)client.sin_addr.S_un.S_un_b.s_b2,
  (unsigned char)client.sin_addr.S_un.S_un_b.s_b3,
  (unsigned char)client.sin_addr.S_un.S_un_b.s_b4);
  std::cout << "Client accepted on " <<  argv[1] << std::endl 
   << "_________________________________________" << std::endl;
 
 /******************** STEP 6 *********************************/
 /* Loop and wait for client to connect */
 Name = argv[3];
 Name = "[" + Name + "] ";
 while(1)
 {
  /************** STEP 7 ***********************************/
  /* Get data from client until there's no more to get */
  recv(client_sd, ReadText, 255, 0);
  std::cout << Text << std::endl;
 
  std::cout << Name;
  std::getline (std::cin,Text);
  Text = Name + Text;
  char* SendText = const_cast<char*> (Text.c_str());
  /* Send data */
  send(client_sd, SendText, (int)strlen(SendText) + 1, 0);
 }
   closesocket(client_sd); /* Close client socket */
 
 return 0;
 }
 
 
 
 Koda za client
 
 #include <iostream>
 #include <cstring>
 #include <cstring>
 #include <cstdlib>
 #include <winsock.h>
 
 int main(int argc, char *argv[])
 {
 system("cls");
 system("color 0a");
 SOCKET sd;  /* The socket descriptor */
 int a1, a2, a3, a4;   /* The four numbers of the address in xxx.xxx.xxx.xxx form */
 WSADATA w;  /* Used to open the Windows connection */
 struct sockaddr_in server;  /* The server information */
 unsigned short int port_number;  /* The port to use */
 char ReadText[256];   /* The response from the server */
 
 std::string Name, Name_;
 std::string Text;
 
 /* Make sure there are three entries on the command line */
 if (argc != 4)
 {
  std::cout << "Usage: simpcli [server address] [port number] [nickname]" 
    << std::endl;
  system("pause");
  exit(0);
 }
 
 /* Read the command line */
 if (sscanf(argv[1], "%d.%d.%d.%d", &a1, &a2, &a3, &a4) != 4)
 {
  std::cout << "Error reading address in xxx.xxx.xxx.xxx form." << std::cout;
  system("pause");
  exit(0);
 }
 
 if (sscanf(argv[2], "%u", &port_number) != 1)
 {
  std::cout <<  "Error reading port number." << std::endl;
  system("pause");
  exit(0);
 }
 
 if (sscanf(argv[3], "%s", &Name_) != 1)
 {
  std::cout <<  "Error reading nickname." << std::endl;
  system("pause");
  exit(0);
 }
 
 /* Open up the Windows connection. This is necessary before calling
 the other WinSock functions. */
 if (WSAStartup(0x0101, &w) != 0)
 {
  std::cout << "Could not open windows connection." << std::endl;
  system("pause");
  exit(0);
 }
 
 /* Open up a TCP/IP socket. */
 sd = socket(AF_INET, SOCK_STREAM, 0);
 
 /* Make sure the socket was opened, and quit if not */
 if (sd == INVALID_SOCKET)
 {
  std::cout << "Could not create socket." << std::endl;
  system("pause");
 WSACleanup();
 
  exit(0);
 }
 
 /* Set up the information in the server information structs */
 /* Step 3a: Clear the memory in the server struct */
 memset((void *)&server, '\0', sizeof(struct sockaddr_in));
 
 /* Step 3b: Set the family of the server */
 server.sin_family = AF_INET;
 
 /* Step 3c: Set the port */
 server.sin_port = htons(port_number);
 
 /* Step 3d: Copy the server address into the struct */
 server.sin_addr.S_un.S_un_b.s_b1 = (unsigned char)a1;    
 server.sin_addr.S_un.S_un_b.s_b2 = (unsigned char)a2;
 server.sin_addr.S_un.S_un_b.s_b3 = (unsigned char)a3;
 server.sin_addr.S_un.S_un_b.s_b4 = (unsigned char)a4;
 
 /* Connect to the remote server */
 if (connect(sd, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) != 0)
 {
  std::cout << "Could not connect to address " << argv[1] << " on port" 
    << port_number << std::endl;
  closesocket(sd);
  WSACleanup();
  system("pause");
  exit(0);
 }
 
 /* We are now connected to the server, so we can send and receive data
 according to the protocol established */
 
 /*************** STEP 5 ***************************************/
 /* Transmit data to server */
  std::cout << "_________________________________________" << std::endl;
  Name = argv[3];
  Name = "[" + Name + "] ";
 do
 {
   std::cout << Name;
   std::getline (std::cin,Text);
   Text = Name + Text;
   /* Send data */
   send(sd, Text.c_str(), Text.size() + 1, 0);
 
 /*************** STEP 6 ***************************************/
 /* Receive data back from server */
   recv(sd, ReadText, 255, 0);
   std::cout << ReadText << std::endl;
 }
 while(1);
 
 /**************** STEP 7 ************************************/
 /* Close the socket */
 closesocket(sd);
 
 
 /***************** STEP 8 *************************************/
 /* Close the Windows connection */
 WSACleanup();
 
 return 0;
}



V link morete še dodati povezavo za wsock32.lib.
Program pa je od tukaj, malo predelan.

EDIT: Vse kar sem prej napisal da ne dela sedaj dela, dela zato ker mi je ena spremenljivka nagajala oz. nisem bil pazljiv na njo.
[edit: kodo sem malo skrčil po širini - Gundolf]

Lp,

Zgodovina sprememb…

  • spremenil: Gundolf ()

fx ::

Program sedaj pa de bo kot irc.

Snow a samo z niti, ker jaz sem mislo da bi s časvno prekinirvijo. A ima kdo kaki drugi predlog.

lp,

feithless ::

Kateri je najlažji (najhitrejši) način da iz stringa oblike "xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx" izluščim npr. tretjo besedo?

hvala


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program za C++ jezik

Oddelek: Programska oprema
232833 (1868) popaj113
»

Kako bi naredil en ultra simple programček?

Oddelek: Programiranje
492305 (1586) AtaStrumf
»

C++ & XP

Oddelek: Programiranje
241655 (1262) Exilian
»

C++ in pavza

Oddelek: Programiranje
161202 (963) napsy
»

c++ datoteke

Oddelek: Programiranje
464013 (3502) Vesoljc

Več podobnih tem