Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Помощ с курсова по C++(Масиви)

Featured Replies

Зададен е едномерен масив от цели числа A,A1,.....,An-1.Да се състави програма,която създава нов масив a,a1,...,an-1,като стойността на ai е равна на сумата от третите степени на цифрите на Ai.В програмата да се използват динамични масиви.

Ето това е кодът,който съм измислил за сега. За първа година уча този език и идея си нямам как да направя задачата. :(

Spoiler

 

#include <stdio.h>
#include <stdlib.h>
 void int main(int argc, char const *argv[])
 {
     int n,suma;
     int C[100];
     printf("Задайте размера на масива A(n):  ");scanf("%d",&n);
    int *A = new int [n];
for (int i = 0; i < n; ++i)
    {
    printf("Въведете елемент %d: ",i);scanf("%f",&A);

    }
    int *a = new int [n];
for (int c = A; i < n; ++i)
    {
        C = num % 10;
        num /= 10;
    }
    system("pause");
     return 0;
 }

 

 

Редактирано от petarrr (преглед на промените)

#include <stdio.h>
#include <stdlib.h>

void create(int** masif, int length)
{
	*masif = (int*)malloc(length*sizeof(int));
}

void destroy(int* masif)
{
	free(masif);
}

void vasto(int* masif, int length)
{
	int i;
	for (i = 0; i < length; i++)
	{		
		printf("vavedete i[%d] = ", i);
		scanf ("%d", &(masif[i]));
	}
}

void otpe(int* masif, int length)
{
	int i;
	printf("\n\n");
	for (i = 0; i < length; i++)
	{
		printf("i[%d] = %d\n", i, masif[i]);
	}
	printf("\n");
}

int sutriste(int n)
{
	int temp;
	int sum = 0;
	int sn;
	sn = abs(n);
	while (sn != 0)
	{
		temp = sn % 10;
		temp = temp * temp * temp;
		sum = sum + temp;
		sn = sn / 10;
	}
	return sum;
}

int main()
{
	int i;
	int length = 0;
	int* A;
	int* a;
	printf("Zadajte dylzhina na masiva -> ");
	scanf("%d", &length);
	printf("\n");
	create(&A, length);
	create(&a, length);
	vasto(A, length);
	for (i = 0; i < length; i++)
	{
		a[i] = sutriste(A[i]);
	}
	otpe(a, length);
	destroy(a);
	destroy(A);
	return 0;
}

 

Редактирано от Реджеп Иведик (преглед на промените)

Колеги кода, който сте написали не е на C++, а е на С. Ето моето решение, което написах набързо и не е много оптимизирано като пърформънс. Авторе, ще те посъветвам, когато стигнеш до указатели да потърсиш как те са свързани с масивите и че реално масивите са указатели, но използват по-удобен за разбиране синтаксис наречен syntax sugar. *(arr+5) е същото като arr[5]. Динамичен масив означава че си създаваш масив по време на изпълнението на програмата и размера му се определя тогава а не по време на компилацията и се използва в случаи когато не знаеш колко голям масив ти трябва. Другото което е, че условието според мен не е добре зададено. Първо, не се знае как се инициализира дадения масив - входни данни или директно с някакви стойности. Също така трябва да ти е ясно на кой от двата програмни езика (C or C++) пишеш, защото са коренно различни в днешно време.

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

int main(){


    cout << "Enter input size: " << endl;
    int n;
    cin >> n;

    int arr[n];

    for(int i=0;i<n;i++){

        cout << "Enter value for " << i << " index" << endl;
        cin >> arr[i];
    }

    cout << endl;

    
    int* items = new int;
    
    
    
    
    for(int i= 0;i<n;i++){
        int j = arr[i];
        items[i] = 0;
        while(j>0){
            
            items[i] = items[i] + pow(j % 10,3);
            j = j / 10;
        }
    }


    for(int i=0;i<n;i++){
            cout << items[i] << endl;
    }
    
    delete[] items;

    return 0;
}

 

Редактирано от frozener (преглед на промените)

Да ама не, динамично зададен масив по стандарта за C++ не е int arr[n], а int* arr=new int[n]; съответно и int* items = new int; пак е грешно щото заделя памет само за едно число, а не за n.

преди 11 часа, ined написа:

Да ама не, динамично зададен масив по стандарта за C++ не е int arr[n], а int* arr=new int[n]; съответно и int* items = new int; пак е грешно щото заделя памет само за едно число, а не за n.

Ох, да прав си. Нещо съм се объркал. Извинявам се, ще я оправя. :D

Редакцията на кода ми

 

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

int main(){


    const int m = 10;
    double arr[m];

    for(int i=0;i<m;i++){

        cout << "Enter value for " << i << " index" << endl;
        cin >> arr[i];
    }

    cout << endl;

    
    double* items = new double[m];
    
    
    
    
    for(int i= 0;i<m;i++){
        double j = arr[i];
        items[i] = 0;
        while(j>0){
            
            items[i] = items[i] + pow(j / 10,3);
            j = j / 10;
        }
    }


    for(int i=0;i<m;i++){
            cout << items[i] << endl;
    }
    
    delete[] items;

    return 0;
}

Забелязах един скрит проблем. Функцията pow използва параметри double или float, а на мен ми позволява да използвам цели числа и не дава грешки при компилация, обаче при някои компилатори ми дава затова обърнах целите числа в десетични дроби и сега не знам дали правилно връща цифрите.

Редактирано от frozener (преглед на промените)

преди 26 минути, frozener написа:

Забелязах един скрит проблем. Функцията pow използва параметри double или float, а на мен ми позволява да използвам цели числа и не дава грешки при компилация, обаче при някой компилатори ми дава затова обърнах целите числа в десетични дроби и сега не знам дали правилно връща цифрите.

Прочети за имплисит конвършънс

Редактирано от Реджеп Иведик (преглед на промените)

Няма абсолютно никаква причина да ползваш аритметика с плаваща запетая след като задачата е за цели числа.

#include <iostream>

using namespace std;

int sum3(int x)
{
    int sum=0;
    if (x<0) x=-x;
    while (x)
    {
        int c=x%10;
        sum+=c*c*c;
        x/=10;
    }
    return sum;
}

int main()
{
    int n;
    cout<<"n = ";
    cin>>n;
    if (n<1) return 0;
    int *a=new int[n];
    int *b=new int[n];
    for (int i=0; i<n; ++i)
    {
        cout<<"a["<<i<<"] =";
        cin>>a[i];
        b[i]=sum3(a[i]);
    }
    for (int i=0; i<n; ++i)
        cout<<"b["<<i<<"] = "<<b[i]<<endl;
}

 

преди 3 часа, frozener написа:

Редакцията на кода ми

 


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

int main(){


    const int m = 10;
    double arr[m];

    for(int i=0;i<m;i++){

        cout << "Enter value for " << i << " index" << endl;
        cin >> arr[i];
    }

    cout << endl;

    
    double* items = new double[m];
    
    
    
    
    for(int i= 0;i<m;i++){
        double j = arr[i];
        items[i] = 0;
        while(j>0){
            
            items[i] = items[i] + pow(j / 10,3);
            j = j / 10;
        }
    }


    for(int i=0;i<m;i++){
            cout << items[i] << endl;
    }
    
    delete[] items;

    return 0;
}

Забелязах един скрит проблем. Функцията pow използва параметри double или float, а на мен ми позволява да използвам цели числа и не дава грешки при компилация, обаче при някои компилатори ми дава затова обърнах целите числа в десетични дроби и сега не знам дали правилно връща цифрите.

Аз лично не виждам смисъл,защо масив от Х елемента веднъж го алокираш на стака,а след това на хийпа. По-добре още първия масив също да е на хийпа според мен.

Също така погледни първия ред в while цикъла, може би имаш предвид pow( j%10, 3);

преди 2 часа, ined написа:

Няма абсолютно никаква причина да ползваш аритметика с плаваща запетая след като задачата е за цели числа.


#include <iostream>

using namespace std;

int sum3(int x)
{
    int sum=0;
    if (x<0) x=-x;
    while (x)
    {
        int c=x%10;
        sum+=c*c*c;
        x/=10;
    }
    return sum;
}

int main()
{
    int n;
    cout<<"n = ";
    cin>>n;
    if (n<1) return 0;
    int *a=new int[n];
    int *b=new int[n];
    for (int i=0; i<n; ++i)
    {
        cout<<"a["<<i<<"] =";
        cin>>a[i];
        b[i]=sum3(a[i]);
    }
    for (int i=0; i<n; ++i)
        cout<<"b["<<i<<"] = "<<b[i]<<endl;
}

 

Мисля,че точно в този случай не е голяма драма, но все пак е добре да освобождаваш алокираната памет, за да поддържаш навика, ще е ползотворно,когато пишеш по-големи програми. Или пък просто ползвай

умни указатели.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.