Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 03.04.2010 o 22:49, o_Orange napisał:

A mi, w tak zwanym międzyczasie, udało się znaleźć ten post:
http://www.forum.tweaks.pl/maksymalizacja-okna-konsoli-t7059.html

Tak, tylko, że wykorzystuje się trik polegający na odwołaniu do API Windows. W ten sposób program staje się taką hybrydą programu konsolowego i niekonsolowego. Co prawda jest to tylko jedna funkcja, ale nie istnieje ona nigdzie poza Windows i bibliotekami tego systemu, które trzeba wlinkować do programu konsolowego. Działa to właśnie tak jak napisanie własnego programu GUI i sterowanie przez niego okienkiem. Tyle, że sterowanie sprowadza się tu do wykonania jednej procedury SetConsoleDisplayMode, a konsola jest "podbierana" z systemowej.
Ten przykład jest zresztą niekompletny ponieważ nie zawiera metody pozwalającej na sprawdzenie czy konsola odpaliła się na pełnym ekranie czy w oknie - zmusza użytkownika do określenia tego samodzielnie podając fałszywe pytanie czy chce zmaksymalizować konsolę podczas gdy tak naprawdę pyta o to czy konsola odpaliła się w okienku czy na pełnym ekranie.
Jeżeli ktoś by to uzupełnił lub sprawdził wielkość dołączonego przez linker kodu, to nagle okazałoby się, że kodu obsługującego Windows jest dużo więcej niż właściwego kodu dla konsoli.

Dnia 03.04.2010 o 22:49, o_Orange napisał:

Co prawda program działa z wykorzystaniem biblioteki windowsowskiej i konieczne jest
deklarowanie tego czegoś:
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif

To coś, to siłowe zadeklarowanie stałej informującej, że program ma być kompilowany jako okienkowy. Jest to wyciągnięty fragment z nagłówków bibliotecznych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

#include <iostream>
using namespace std;

int main()
{
char zn;
do
{
int l;
cout<<"Podaj liczbe: ";
cin>>l;
for(int li=0;li<l;li++)
if(li%4=0)
cout<<li<<" ";
if(l<4)
cout<<"Brak liczb podzielnych przez 4 w zakresie <0,"<<l<<">";
cout<<"Powtorzyc dzialanie (''t''jesli tak)?";
cin>>zn;
}
while(zn=''t''||zn=''T'');
system("PAUSE");
return 0;
}


Błąd tu if(li%4=0) i tu while(zn=''t''||zn=''T''); - non-lvalue in assignment. Nie mogę zrozumieć, pierwszy raz taki widzę.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 19.04.2010 o 19:57, tomoliop napisał:

Błąd tu if(li%4=0) i tu while(zn=''t''||zn=''T''); - non-lvalue in assignment. Nie mogę zrozumieć, pierwszy raz taki widzę.


Testy robisz przez == nie przez =
Powinno być if(li%4 == 0)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 19.04.2010 o 19:57, tomoliop napisał:

Błąd tu if(li%4=0) i tu while(zn=''t''||zn=''T''); - non-lvalue in assignment. Nie mogę zrozumieć, pierwszy raz taki widzę.

if(li%4=0). Jeśli li%4 ma wynosić zero -> w tym momencie podstawiasz za li%4 wartość 0. Porównujesz używając podwójnego znaku równości, czyli ''==''. W drugim tak samo.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

#include <iostream>

using namespace std;
int main()
{
int l,s,dod,i;
cout<<"Podaj liczbe naturalna: ";
cin>>l;
while(s<=l);
{ i++;
s=s+i;
dod++;
}
cout<<"Nalezalo dodac"<<dod<<" liczb, aby uzyskac liczbe mniejsza lub rowna podanej przez ciebie";
system("PAUSE");
return 0;
}

Wybaczcie, że drugi dzień pod rząd... Program ma dodawać kolejne liczby naturalne: 1+2+3... aż ich suma będzie równa lub mniejsza liczbie naturalnej podanej przez użytkownika na początku. I program ma na końcu wyświetlić ile liczb należało dodać. Mój problem tkwi właśnie w tym ostatnim, program wyświetla jakąś dziwną liczbę.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie inicjujesz ani s, ani i, ani dod. Skoro mają one początkowo nie mieć wartości, to muszą zostać zainicjowane jako zera. A tak to u Ciebie mogą mieć wartość początkową 21346, 11111, 9912 i inne losowe z przedziału Integer''a.
No i w while''a nigdy Ci nie wchodzi, skoro zaraz za nawiasem zamykasz jego funkcję. Jak klamra ma się w nim znajdować, to nie możesz napisać while(coś_tam); {} Musi to być napisane while(coś_tam){}

I polecam na przyszłość do kodów: http://pastebin.com/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.04.2010 o 21:16, tomoliop napisał:

Program ma dodawać kolejne liczby naturalne: 1+2+3...
aż ich suma będzie równa lub mniejsza liczbie naturalnej podanej przez użytkownika na
początku. I program ma na końcu wyświetlić ile liczb należało dodać.


Przemyśl sens tego programu... "Suma" złożona z samej jedynki jest mniejsza lub równa od każdej liczby naturalnej, nie trzeba tam nic dodawać. Zapewne chcesz zliczyć, ile liczb naturalnych można dodać i nie przekroczyć l, ale to nie jest to, co napisałeś.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.04.2010 o 21:30, Wilkv napisał:

Nie inicjujesz ani s, ani i, ani dod. Skoro mają one początkowo nie mieć wartości, to
muszą zostać zainicjowane jako zera. A tak to u Ciebie mogą mieć wartość początkową 21346,
11111, 9912 i inne losowe z przedziału Integer''a.
No i w while''a nigdy Ci nie wchodzi, skoro zaraz za nawiasem zamykasz jego funkcję.
Jak klamra ma się w nim znajdować, to nie możesz napisać while(coś_tam); {} Musi to być
napisane while(coś_tam){}

I polecam na przyszłość do kodów: http://pastebin.com/


Ponownie dziękuję:). Muszę więcej ćwiczyć.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam, mam do napisania program, którego wejściem będzie liczba N, a następnie N liczba naturalnych. Program ma sprawdzać czy liczby N są doskonałe, deficytowe czy nadmiarowe. Napisałem coś takiego:

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
main()

{
int n, ile;
int backup;
int i;
int *tab;
int sum = 0;
printf("Podaj liczbe: ");

scanf("%d", &ile);
tab = (int*) malloc(ile+1);
for(n=0; n<ile; ++n)
{
scanf("%d", &tab[n]);
}
scanf("%d",&tab[n]);
backup =tab [n];
for (i = 1; i <= n/2; i++)

{
if (tab[n] % i == 0)
sum += i;
}
if(sum == backup)
printf("doskonala");
if(sum > backup)
printf("nadmiarowa");
else
printf("deficytowa");
getch();
}
O ile wejście działa bez zarzutu i program dobrze określa czy liczba jest doskonała to kompilator traktuje całość jako 2 oddzielne programy tzn. wczytuje liczby N ale określa jaka to liczba tylko dla następnej podanej liczby(wpisując 3 liczby określa czy liczba jest doskonała dopiero dla czwartej). Bardzo proszę o pomoc w "połączeniu" programu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.05.2010 o 18:32, Seveltarm napisał:

Program ma sprawdzać czy liczby N są doskonałe, deficytowe czy nadmiarowe.


Co to znaczy że liczba jest deficytowa czy nadmiarowa? Co dokładnie ma robić ten program, bo strasznie nakombinowałeś w tym kodzie... ;]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Też mam pewne trudności z rozwikłaniem, co dokładnie się dzieje w tym programie, ale wydaje mi się, że problem powoduje użycie zmiennej n, która zostaje zwiększona w wyniku działania pierwszej pętli. W drugiej pętli dzielisz modulo tylko ostatnią podaną liczbę kolejno przez 1 do jej połowy - a co z wpisanymi wcześniej liczbami?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.05.2010 o 18:32, Seveltarm napisał:

Witam, mam do napisania program, którego wejściem będzie liczba N, a następnie N liczba
naturalnych. Program ma sprawdzać czy liczby N są doskonałe, deficytowe czy nadmiarowe.
Napisałem coś takiego:

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
main()

{
int n, ile;
int backup;
int i;
int *tab;
int sum = 0;
printf("Podaj liczbe: ");

scanf("%d", &ile);


Tu podajesz liczbę np. 4 - tyle liczb chcesz wczytać

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

tab = (int*) malloc(ile+1);


Tworzysz tablicę na 5 liczb - po co?

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

for(n=0; n<ile; ++n)
{
scanf("%d", &tab[n]);
}


Wczytujesz 4 liczby

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

scanf("%d",&tab[n]);


Po co wczytujesz 5?

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

backup =tab [n];


Wczytujesz do backup ostatnią wprowadzoną liczbę (piąta w kolejności)

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

for (i = 1; i <= n/2; i++)

{
if (tab[n] % i == 0)
sum += i;
}


Znajdujesz dla niej sumę wszystkich jej dzielników

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

if(sum == backup)
printf("doskonala");
if(sum > backup)
printf("nadmiarowa");
else
printf("deficytowa");
getch();
}


Wypisujesz czy ostatnia wprowadzona liczba jest poprawna.

Dnia 05.05.2010 o 18:32, Seveltarm napisał:

O ile wejście działa bez zarzutu i program dobrze określa czy liczba jest doskonała to
kompilator traktuje całość jako 2 oddzielne programy tzn. wczytuje liczby N ale określa
jaka to liczba tylko dla następnej podanej liczby(wpisując 3 liczby określa czy liczba
jest doskonała dopiero dla czwartej). Bardzo proszę o pomoc w "połączeniu" programu.


Wniosek jest taki jakbyś zapomniał o jednej pętli która policzyłaby czy liczba jest taka czy taka dla każdej liczby a nie tylko dla ostatniej. Stwórz dużego fora dla całej sekcji testującej który skacze po wszystkich liczbach z tablicy.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chciałbym złączyć dane typu , int + string + tekst w jedność ?

ip_full = "ping" + ip_addr + "." +IntToStr(i);

system(ip_full);

próbowałem z czymś takim , ale niestety się sypie

Jak rozwiązać ten problem ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.05.2010 o 12:38, Jan_Czarny napisał:

Chciałbym złączyć dane typu , int + string + tekst w jedność ?
ip_full = "ping" + ip_addr + "." +IntToStr(i);
system(ip_full);
próbowałem z czymś takim , ale niestety się sypie
Jak rozwiązać ten problem ?


Utworzyć strukturę (w niektórych językach nazywa się to rekord) zawierającą 1 integer i 2 stringi.
Można też utworzyć klasę z takimi składowymi zmiennymi.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.05.2010 o 17:49, Volvox napisał:

> Chciałbym złączyć dane typu , int + string + tekst w jedność ?
> ip_full = "ping" + ip_addr + "." +IntToStr(i);
> system(ip_full);
> próbowałem z czymś takim , ale niestety się sypie
> Jak rozwiązać ten problem ?

Utworzyć strukturę (w niektórych językach nazywa się to rekord) zawierającą 1 integer
i 2 stringi.
Można też utworzyć klasę z takimi składowymi zmiennymi.


#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

struct Dane {

std::string ip_addr, ip_full, check;
int i;

};


int main() {

std::string ip_addr, ip_full;



std::cout << "Podaj 3 oktety Adreu ip \n";
std::cin >> ip_addr;


for(int i=1;i<=256;i++)

{
std::cout << "ip check :"<< ip_addr << "."<< i <<"\n";

Dane DATA =
{"ping ", ip_addr,".", i};


system(DATA);



}

system("pause");

}

Coś takiego złożyłem i jest problem

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.05.2010 o 22:10, Jan_Czarny napisał:

Coś takiego złożyłem i jest problem


Ech, źle Cię zrozumiałem za pierwszym razem :)

Tu to co potrzebujesz:
int main() {
string ip; //poczatek adresu
string ip_full; //pelna komenda do wykonania
string tmp; //zmienna pomocnicza do konwersji
ip = "10.0.0"; //ja wpisalem na sztywno, ale moze podac user

for(int x=1;x<255;x++){
sprintf((char*)tmp.c_str(), "%d", x); //konwersja z inta na stringa. troche skomplikowana ale nie znam lepszej
ip_full = "ping " + ip + "." + tmp.c_str() + " /n 1 /w 10"; //konkatenacja w stringa. Parametr /n oznacza ile razy wysylac pinga, a /w jak dlugo czekac na odpowiedz
system(ip_full.c_str()); //funkcja system wymaga podania zmiennej w formie C-string
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.05.2010 o 23:50, Volvox napisał:

> Coś takiego złożyłem i jest problem

Ech, źle Cię zrozumiałem za pierwszym razem :)

Tu to co potrzebujesz:
int main() {
string ip; //poczatek adresu
string ip_full; //pelna komenda do wykonania
string tmp; //zmienna pomocnicza do konwersji
ip = "10.0.0"; //ja wpisalem na sztywno, ale moze podac user

for(int x=1;x<255;x++){
sprintf((char*)tmp.c_str(), "%d", x); //konwersja z inta na stringa. troche skomplikowana
ale nie znam lepszej
ip_full = "ping " + ip + "." + tmp.c_str() + " /n 1 /w 10"; //konkatenacja w stringa.
Parametr /n oznacza ile razy wysylac pinga, a /w jak dlugo czekac na odpowiedz
system(ip_full.c_str()); //funkcja system wymaga podania zmiennej w formie C-string
}



Dzięki :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Cześć, mam problem z zadaniem w c++. Nie wiem jak je zapisać. Ma automatycznie wykryć koniec wprowadzania dancyh wejściowych i zamieniać je na binarne liczby bez zer (jeśli są) na początku. Macie jakieś porady?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować