1

Тема: Перевести код з с# на сі

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] arr = Enumerable.Repeat(new Random(), 24).Select(r => r.Next(-10, 26)).ToArray();
        Console.WriteLine(String.Join(", ", arr));
        int[] negativeIndexes = Enumerable.Range(0, arr.Length).Where(i => arr[i] < 0).ToArray();
        for (int i = 0, j = negativeIndexes.Length - 1; i < j; i++, j--)
        {
            int t = arr[negativeIndexes[i]];
            arr[negativeIndexes[i]] = arr[negativeIndexes[j]];
            arr[negativeIndexes[j]] = t;
        }
        Console.WriteLine(String.Join(", ", arr));
    }
}

2

Re: Перевести код з с# на сі

А що ви вже самі перевели?
(Постарайтесь не створювати теми в наказовому тоні, то дуже дратує більшість форумчан)

Подякували: koala1

3

Re: Перевести код з с# на сі

0x9111A написав:

А що ви вже самі перевели?
(Постарайтесь не створювати теми в наказовому тоні, то дуже дратує більшість форумчан)

#include <stdio.h>

int main(void) {

    {
        int[] arr = Enumerable.Repeat(new Random(), 24).Select(r => r.Next(-10, 26)).ToArray();
        printf()
        int[] negativeIndexes = Enumerable.Range(0, arr.Length).Where(i => arr[i] < 0).ToArray();
        for (i = 0, j = - 1; i < j; i++, j--)
        {
            int t = arr[negativeIndexes[i]];
            arr[negativeIndexes[i]] = arr[negativeIndexes[j]];
            arr[negativeIndexes[j]] = t;
        }
        printf()
    }
}
    return 0;
}

4

Re: Перевести код з с# на сі

marysluva написав:
0x9111A написав:

А що ви вже самі перевели?
(Постарайтесь не створювати теми в наказовому тоні, то дуже дратує більшість форумчан)

#include <stdio.h>

int main(void) {

    {
        int[] arr = Enumerable.Repeat(new Random(), 24).Select(r => r.Next(-10, 26)).ToArray();
        printf()
        int[] negativeIndexes = Enumerable.Range(0, arr.Length).Where(i => arr[i] < 0).ToArray();
        for (i = 0, j = - 1; i < j; i++, j--)
        {
            int t = arr[negativeIndexes[i]];
            arr[negativeIndexes[i]] = arr[negativeIndexes[j]];
            arr[negativeIndexes[j]] = t;
        }
        printf()
    }
}
    return 0;
}
Прихований текст

ги

5

Re: Перевести код з с# на сі

Боюсь так діла не буде, бо там навіть кількість дужок не сходиться

Для початку розберіться що і як робить оцей рядок

int[] arr = Enumerable.Repeat(new Random(), 24).Select(r => r.Next(-10, 26)).ToArray();
Подякували: FakiNyan, marysluva2

6

Re: Перевести код з с# на сі

прикольна ця штука, воно спочатку створює послідовність з екземплярів класу Random, а потім звертається до кожного елементу цієї послідовності, викликаючи метод Next, котрий повертає випадкове число між -10 та 26, після чого компонує ці числа в масив
тобто - це просто заповнення масиву, довжиною 24 елемента, рандомними числами від -10 до 26

Подякували: 0x9111A, marysluva2

7

Re: Перевести код з с# на сі

int[] negativeIndexes = Enumerable.Range(0, arr.Length).Where(i => arr[i] < 0).ToArray();

а от тут знову створюється послідовність довжиною arr.Length, котра заповнюється від 0 до arr.Length, після чого ми перебираємо кожен елемент цієї послідовності, і звіряємо з нулем кожен елемент масиву arr, індекс котрого дорівнює поточному елементу раніше створеної послідовності, і якщо воно менше нуля, то додаємо його в масив.
Коротше кажучи, ми витягуємо з масиву arr всі елементи, котрі менші нуля, і запихуємо їх в новий масив.

Подякували: 0x9111A, marysluva2

8

Re: Перевести код з с# на сі

Вже переписали?

9

Re: Перевести код з с# на сі

FakiNyan написав:

Вже переписали?

Ні, не вийшло

10

Re: Перевести код з с# на сі

marysluva написав:
FakiNyan написав:

Вже переписали?

Ні, не вийшло

що саме не вийшло? покажіть код невдачі

11

Re: Перевести код з с# на сі

Шановна marysluva, гадаю, ви помилилися форумом. Тут не роблять за інших завдання, тут допомагають самостійно їх розв'язати. Єдиний виняток - гілка "пропоную роботу", але там вимагають грошей.

Подякували: FakiNyan1

12

Re: Перевести код з с# на сі

Перше, що треба знати: цей приклад на С# використовує можливості мови, яких нема в Сі, тому дії, що дадуть той же результат, доведеться робити іншим способом.

Спробуймо записати словами, що має робити ця програма (поки що наполовину псевдокод):

#include<stdio.h>

main()
    {
        int i, j;
        int arr[24] =...;// Масив із 24 елементів, кожен з яких лежить у діапазоні від -10 до 26
        ...;//Вивести всі елементи масиву arr у рядок, розділений комами
        int negativeIndexes[] = ...;//масив індексів елементів масиву arr, що мають від'ємне значення
        int negativeIndexesLength = ...;//змінна, що містить кількість знайдених від'ємних елементів
        for (i = 0, j = negativeIndexesLength - 1; i < j; i++, j--)
        {
            int t = arr[negativeIndexes[i]];
            arr[negativeIndexes[i]] = arr[negativeIndexes[j]];
            arr[negativeIndexes[j]] = t;
        }
        ...; //ще раз вивести arr
    }

Ті рядки, де стоять трикрапки — псевдокод, замість якого треба буде написати справжній код. Наприклад, замість int arr[24] =...; має бути щось таке:

int arr[24];
for(i=0; i<24; i++)
    arr[i]=rand()%36 - 10; //rand()%36 — це випадкове число від 0 до 35 включно

Вивід елементів — також циклом (спробуйте написати самостійно).

Масив індексів від'ємних елементів можна зробити такого ж розміру, що й arr (бо від'ємних елементів у ньому гарантовано буде не більше, ніж усіх елементів разом). Сішні масиви не мають вбудованого лічильника елементів (.Length у сішарпі), тому оголошуємо окрему змінну, в яку буде записуватись кількість елементів, які ми туди додали. Пошук від'ємних елементів виглядатиме приблизно так:

        int negativeIndexes[24];
        int negativeIndexesLength=0;
        for(i=0; i<24; i++)
            if(arr[i]<0) negativeIndexes[negativeIndexesLength++]=i;

Найважчу частину я зробив. Тепер скомпонуйте все в одну програму й допишіть те, що лишилось недописаним.

Подякували: marysluva, Yola2

13

Re: Перевести код з с# на сі

оффтоп

здається я розумію чому у вас проблеми з дівчатами, ви зовсім не розумієте що їм треба а що ні  :D

14

Re: Перевести код з с# на сі

P.Y. написав:

Перше, що треба знати: цей приклад на С# використовує можливості мови, яких нема в Сі, тому дії, що дадуть той же результат, доведеться робити іншим способом.

Спробуймо записати словами, що має робити ця програма (поки що наполовину псевдокод):

#include<stdio.h>

main()
    {
        int i, j;
        int arr[24] =...;// Масив із 24 елементів, кожен з яких лежить у діапазоні від -10 до 26
        ...;//Вивести всі елементи масиву arr у рядок, розділений комами
        int negativeIndexes[] = ...;//масив індексів елементів масиву arr, що мають від'ємне значення
        int negativeIndexesLength = ...;//змінна, що містить кількість знайдених від'ємних елементів
        for (i = 0, j = negativeIndexesLength - 1; i < j; i++, j--)
        {
            int t = arr[negativeIndexes[i]];
            arr[negativeIndexes[i]] = arr[negativeIndexes[j]];
            arr[negativeIndexes[j]] = t;
        }
        ...; //ще раз вивести arr
    }

Ті рядки, де стоять трикрапки — псевдокод, замість якого треба буде написати справжній код. Наприклад, замість int arr[24] =...; має бути щось таке:

int arr[24];
for(i=0; i<24; i++)
    arr[i]=rand()%36 - 10; //rand()%36 — це випадкове число від 0 до 35 включно

Вивід елементів — також циклом (спробуйте написати самостійно).

Масив індексів від'ємних елементів можна зробити такого ж розміру, що й arr (бо від'ємних елементів у ньому гарантовано буде не більше, ніж усіх елементів разом). Сішні масиви не мають вбудованого лічильника елементів (.Length у сішарпі), тому оголошуємо окрему змінну, в яку буде записуватись кількість елементів, які ми туди додали. Пошук від'ємних елементів виглядатиме приблизно так:

        int negativeIndexes[24];
        int negativeIndexesLength=0;
        for(i=0; i<24; i++)
            if(arr[i]<0) negativeIndexes[negativeIndexesLength++]=i;

Найважчу частину я зробив. Тепер скомпонуйте все в одну програму й допишіть те, що лишилось недописаним.

Ось, зробила

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 24
 
int main(void)
{
    srand(time(NULL));
    int arr[N];
    int neg[N];
    int neg_count = 0;
    for (int i = 0; i < N; i++)
    {
        arr[i] = rand() % 36 - 10;
        if (arr[i] < 0) { neg[neg_count++] = i; }
        printf("%d ", arr[i]);
    }
    putchar('\n');
    for (int i = 0, j = neg_count - 1; i < j; i++, j--)
    {
        int t = arr[neg[i]];
        arr[neg[i]] = arr[neg[j]];
        arr[neg[j]] = t;
    }
    for (int i = 0; i < N; i++)
    {
        printf("%d ", arr[i]);
    }
    putchar('\n');
    return 0;
}
Подякували: 0xDADA11C7, P.Y., koala, 0x9111A4