• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie C++, prosze o szybką pomoc

VPS Starter Arubacloud
0 głosów
640 wizyt
pytanie zadane 6 października 2021 w C i C++ przez polandonion Mądrala (6,970 p.)
edycja 6 października 2021 przez polandonion

Witam,

Dostałem zadanie zo wykonanie, ale nie wiem co mam źle w kodzie, moglibyście w niego zerknąć? Dzięki z góry wszystkim.


Zadanie:

Dana jest liczba naturalna a. Wypisz wszystkie kolejne liczby naturalne, począwszy od a, aż do najbliższej liczby, która jest kwadratem liczby naturalnej.

Wejście:

W pierwszej linii wejścia znajduje się jedna liczba całkowita a(1 <= a <= 1 000 000).

Wyjście:

Program powinien wypisać poodzielane spacjami kolejne liczby naturalne. Pierwszą z nich powinna być liczba a, a ostatnią najbliższa liczba będąca kwadratem liczby naturalnej.


Zgłoszenie:


Mój kod:


Ewentualnie tutaj macie do szybkiego skopiowania:

#include<iostream>
#include<math.h>
int main()
{
	long long int liczba; scanf("%lld",&liczba);
	long long int l1=sqrt(liczba)+1;
	for(long long int i=liczba; i<=l1*l1; i++)
	{
		printf("%lld ",i);
	}
}

 

komentarz 6 października 2021 przez TOM_CPP Pasjonat (22,640 p.)
Trudno jest pomóc, nie mając pojęcia jaka jest treść zadania, którego zamieszczony obraz jest nieczytelny.
komentarz 6 października 2021 przez polandonion Mądrala (6,970 p.)
Wkleiłem polecenie z oryginalnego źródła. Teraz jest już widoczne

3 odpowiedzi

+1 głos
odpowiedź 6 października 2021 przez TOM_CPP Pasjonat (22,640 p.)

Prawdopodobnie problem jest związany z błędną interpretacją treści zadania. Dla liczb będących kwadratami liczb naturalnych ( 4, 16 , 25 , ... ) program IMO powinien wypisywać tylko jedną liczbę, gdyż nigdzie nie jest napisane że najbliższa liczba będąca kwadratem liczby naturalnej nie może być równa liczbie wejściowej.

Zobacz

#include <iostream>
#include <cmath>

using namespace std;

using ll_int = long long int;

int main()
{
    ll_int liczba;
    cin >> liczba;

    ll_int sq { sqrt(liczba) };
    if( sq*sq != liczba ) sq+=1;

    for( ll_int i {liczba} ; i<=sq*sq ; ++i )
    {
        cout << i << ' ';
    }
}

 

1
komentarz 6 października 2021 przez pionas0407 Gaduła (4,620 p.)
tutaj też bym usunął ll_int'a i po prostu inta wrzucił
+1 głos
odpowiedź 6 października 2021 przez pionas0407 Gaduła (4,620 p.)

Problemem jest Twoja interpretacja zadania.

Autorowi chodziło o znalezienie liczby naturalnej, która będzie najbliżej liczby podanej w konsoli (po podniesieniu do kwadratu). 

Moja propozycja rozwiązania tego problemu:

#include <iostream>

double inline __declspec (naked) __fastcall sqrt1(double n)
{
    _asm fld qword ptr[esp + 4]
        _asm fsqrt
    _asm ret 8
}

int main()
{
    int numberIn, numberSqrt;
    std::cin >> numberIn;
    numberSqrt = sqrt1(numberIn);
    if (numberSqrt * numberSqrt != numberIn) numberSqrt++;
    for (int i = numberIn; i <= numberSqrt * numberSqrt; i++)
        std::cout << i << ' ';
}

Zachęcam Cię, żebyś rozpisał sobie pewne liczby na kartce i spróbował samemu rozwiązać to zadanie.

PS. funkcję sqrt możesz wziąć z jakiejś biblioteki, ta napisana wyżej jest po prostu najszybsza.

Artykuł opisujący funkcje sqrt:

 

1
komentarz 6 października 2021 przez pionas0407 Gaduła (4,620 p.)

kolejna sprawa, czemu używasz long long int?

int	Od -2 147 483 648 do 2 147 483 647

 

komentarz 6 października 2021 przez NewEraOfPeace Gaduła (4,790 p.)

@pionas0407, jasne, daj typkowi co musi zrobic zadanie domowe przekombinawana funkcje ktora jest praktycznie 100% compiler dependent :D. Sprawdziłem, to nie kompiluje mi sie na trunku zadnego z 3 najpopularniejszych kompilatorow.

komentarz 6 października 2021 przez TOM_CPP Pasjonat (22,640 p.)

@pionas0407,  ... ta napisana wyżej jest po prostu najszybsza.

Nie wiem czy jest najszybsza, ale na pewno będzie można ją skompilować tylko przy pomocy MSVC. I to może być problem dla OP, gdyż system testujący zadania może korzystać z innego kompilatora.

1
komentarz 6 października 2021 przez pionas0407 Gaduła (4,620 p.)
@NewEraOfPeace

@TOM_CPP

Dałem link do artykułu, w którym jest 14 rodzajów implementacji metody sqrt :)

Nie wiem, w czym jest problem usunąć metodę i zastąpić ją jakąś z biblioteki czy coś?

U mnie lokalnie poszło to na szybko w przerwie od roboty, wkleiłem tutaj i tyle ;)
1
komentarz 6 października 2021 przez pionas0407 Gaduła (4,620 p.)

@NewEraOfPeace

No to najwyraźniej źle sprawdziłeś 

1
komentarz 6 października 2021 przez NewEraOfPeace Gaduła (4,790 p.)

No to najwyraźniej podaj potencjalnie potrzebne dodatkowe informacje, które są potrzebne, do zbuildowania tego, bo to się po prostu NIE builduje.
https://godbolt.org/z/31ra1MKbs

1
komentarz 6 października 2021 przez pionas0407 Gaduła (4,620 p.)
To fakt, testowanie Asemblera online może stanowić pewne przeszkody, mimo wszystko uważam, że w odpowiedzi podałem artykuł i podkreśliłem, że można zamienić tą metodę na inną :) Lokalnie wyniki wyszły mi bardzo fajne, więc stwierdziłem, że można się takim pomysłem podzielić, to chyba nie jest straszne:)?
0 głosów
odpowiedź 6 października 2021 przez tangarr Mędrzec (154,780 p.)
W komentarzu na spodzie screena z systemu masz wyjaśnienie.
komentarz 6 października 2021 przez polandonion Mądrala (6,970 p.)
Nie wiem dlaczego wywala mi błąd, taki mam problem
komentarz 9 października 2021 przez TOWaD Mądrala (5,700 p.)

Jak dobrze rozumiem teść zadania to powinno być

++i i

//np double delta = 0.0000001 
int naturalna = sqrt(i);
float rzeczywista =sqrt(i);
if(abs(rzeczywista-naturalna)<delta) break;

 

 

 

Podobne pytania

0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 18 grudnia 2022 w C i C++ przez polandonion Mądrala (6,970 p.)
0 głosów
1 odpowiedź 353 wizyt
pytanie zadane 22 grudnia 2021 w Algorytmy przez Hans Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 263 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...