1

(9 відповідей, залишених у C)

Дякую за зауваження!

Глобальні змінні вирішила використовувати, коли у мене не вийшло з локальними, тобто почалася плутанина із передаванням у функції, бо для повторного створення масивів я створила функцію menu, щоб просто викликати її та все розкласти по полицям (хоча у мене це так і не вийшло :') ).

Я не зовсім розумію момент, коли зроблю розміри масивів та самі масиві локальними, доводиться передевати у main тоді розміри, це буде нормальним?

2

(9 відповідей, залишених у C)

Добрий день! Я зараз пишу код для сортування злиттям (Боуза-Нельсона та Неймановське), виникла така проблема: мені потрібно зробити аналіз роботи алгоритмів при різних типів даних. Вирішила використовувати char, int та float, але при виведенні масиву (неважливо якого типу) нічого не виводиться, тільки порожнеча. Підкажіть будь ласка, де саме у мене помилка? Перевіряла все - заповнення, створення - виділення пам'яті, начебто все ок.

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

// Глобальні змінні для коректної роботи
int arr_size, arr_c, arr_f;
int *array;
char *arr;
float *arr_flo;
int data_type;

void merge(int arr[], int l, int m, int r) {
    int i, j, k;
    int n1 = m - l + 1;
    int n2 = r - m;

    int Ar[n1], Br[n2]; // тимчасові підмасиви

    for (i = 0; i < n1; i++)
        Ar[i] = arr[l + i];
    for (j = 0; j < n2; j++)
        Br[j] = arr[m + 1 + j];

    i = 0;
    j = 0;
    k = l;
    while (i < n1 && j < n2) {
        if (Ar[i] <= Br[j]) {
            arr[k] = Ar[i];
            i++;
        }
        else {
            arr[k] = Br[j];
            j++;
            k++;
        }
    }
    while (i < n1) {
        arr[k] = Ar[i];
        i++;
        k++;
    }
    while (j < n2) {
        arr[k] = Br[j];
        j++;
        k++;
    }
}
// функція сортування злиттям
void mergeSort(int arr[], int l, int r) {
    if (l < r) {
        int m = l + (r - l) / 2;

        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);

        merge(arr, l, m, r); // злиття всіх половин
    }
}
void boseNelsonSort(int arr[], int n) {
    for (int groupSize = 1; groupSize < n; groupSize *= 2) {
        for (int left = 0; left < n-1; left += 2*groupSize) {
            int mid = left + groupSize - 1;
            int right = (left + 2*groupSize - 1 < n-1) ? (left + 2*groupSize - 1) : (n-1);
            merge(arr, left, mid, right);
        }
    }
}
// Вивід масивів 3 типів
void printArray(int A[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        printf("%d ", A[i]);
    }
    printf("\n");
}
void printChar(char A[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%c ", A[i]);
    }
    printf("\n");
}
void printFloat(float A[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%.2f ", A[i]);
    }
    printf("\n");
}
// це створення int масиву
int *create_int(int *arr_size) {
    system("cls");
    printf("\n---------------------");
    printf("\nВведіть розмір масиву: ");
    scanf("%d", arr_size);

    int *arr = (int *)malloc((*arr_size) * sizeof(int));

    srand(time(NULL));
    for (int i = 0; i < *arr_size; i++) {
        arr[i] = rand() % 500;
    }
    return arr;
}
// створення char масиву
char *create_char(int *arr_c) {
    system("cls");
    printf("\n---------------------");
    printf("\nВведіть розмір масиву: ");
    scanf("%d", arr_c);

    char *arrchar = (char *)malloc((*arr_c) * sizeof(char));

    srand(time(NULL));
    for(int i = 0; i < *arr_c; i++) {
        arrchar[i] = rand() % 26;
    }
    return arrchar;
}
// для створення float масиву
float *create_float(int *arr_f) {
    system("cls");
    printf("\n---------------------");
    printf("\nВведіть розмір масиву: ");
    scanf("%d", arr_f);

    float *arr_flo = (float *)malloc((*arr_f) * sizeof(float));

    srand(time(NULL));
    for(int i = 0; i < *arr_f; i++) {
        arr_flo[i] = 0.1 * (rand() % 1001);
    }
    return arr_flo;
}
void menu() {
    int ch_1;
    printf("\n------------------");
    printf("\n-------МЕНЮ-------");
    printf("\nЯкий тип даних використовувати");
    printf("\n|1| - Int\n|2| - Char\n|3| - Float\n");
    printf("\nВаш вибір -->  ");
    scanf("%d", &ch_1);

    data_type = ch_1;

    switch(ch_1) {
        case 1:
            if (array != NULL) {
                free(array);
            }
            array = create_int(&arr_size);
            break;
        case 2:
            if (arr != NULL) {
                free(arr);
            }
            arr = create_char(&arr_c);
            break;
        case 3:
            if (arr_flo != NULL) {
                free(arr_flo);
            }
            arr_flo = create_float(&arr_f);
            break;
        default:
            printf("\nОберіть тип даних.");
            break;
    }
}

int main() {
    system("chcp 65001");
    int arr_size, arr_c, arr_f;
    int choice;
    // Для уникнення помилок та для ініціалізації покажчиків
    int *array = NULL;
    char *arr = NULL;
    float *arr_flo = NULL;
    menu();
    while (1) {
        printf("\n|1| - Сортування злиттям Неймана\n|2| - Сортування злиттям Боуза-Нельсона\n|3| - Перегляд масиву\n|4| - Назад\n|5| - Вихід\n");
        printf("\nВаш вибір --->  ");
        scanf("%d", &choice);
        system("cls");
        switch (choice) {
            case 1:
                mergeSort(array, 0, arr_size - 1);
                printf("\n---------------------");
                printf("\nВідсортований масив:\n\n");
                printArray(array, arr_size);
                break;
            case 2:
                boseNelsonSort(array, arr_size);
                printf("\n---------------------");
                printf("\nВідсортований масив:\n\n");
                printArray(array, arr_size);
                break;
            case 3:
                if (data_type == 1) {
                    printf("\nПочатковий масив:\n\n");
                    printArray(array, arr_size);
                }
                else if (data_type == 2) {
                    printf("\nПочатковий масив:\n\n");
                    printChar(arr, arr_c);
                }
                else if (data_type == 3) {
                    printf("\nПочатковий масив:\n\n");
                    printFloat(arr_flo, arr_f);
                }
                break;
            case 4:
                if(array != NULL) {
                    free(array);
                }
                else if(arr != NULL) {
                    free(arr);
                }
                else if(arr_flo != NULL) {
                    free(arr_flo);
                }
                menu();
                break;
            case 5:
                exit(0);
                break;
            default:
                printf("\nВиберіть дію із запропонованих..\n\n");
                break;
        }
    }
    free(array);
    return 0;
}

3

(2 відповідей, залишених у C++)

Добрий день, виконуючи завдання: Створити два стеки, записавши в них цілі числа. Записати в третій стек числа, що рівні
різницям відповідних значень з першого і другого стеків. Вивести на друк вміст усіх трьох стеків (Враховуючи ще вимоги, які надав викладач: Введення інформації у вихідний стек двома (для чисел - трьома) способами: - Читання з текстового файлу; - Введення за клавіатури; - для числових рандомні значення;) виникла така проблема, я зовсім не розумію як організувати введення даних до третього стека. Тобто, спочатку я роблю різницю значень (віднімання) чисел з двох стеків, а потом вже записую у третій? Начебто функцію я написала, але не думаю, що вона буде працювати так, як мені потрібно. Поясніть будь ласка, як це буде правильно зробити

Мій код:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define FILENAME "Stack.txt" //мій текстовий файл
#define FILEEE "StackTwo.txt"
typedef struct//для стеку масив
{
    int msize; //макс размер
    int top; //отслеживать размер стэка
    int *elem;
}Stack;

Stack * st = NULL; //проконтролювати стеки
Stack * st2 = NULL;
Stack * st3 = NULL;

Stack * create(int cap) //виділяю пам'ять
{
    st = (Stack *)malloc(sizeof(Stack));
    if (st == NULL)
    {
        printf("\nЕлементи не знайдені..\n");
    }
    st->msize = cap; //розмір стека
    st->top = -1;
    st->elem = (int *)malloc(st->msize * sizeof(int));
    return st;
}
int isEmpty(Stack *st) //stack порожній чи ні?? 
{
    return st->top == -1;
}
int isFull(Stack *st) 
{
    return st->top == st->msize - 1;
}
void push(Stack *st, int element) //додаю елемент з клавіатури
{
    if (isFull(st))
    {
        printf("\nСтек заповнено..\n");
        return;
    }
    st->elem[++st->top] = element; // +elem і індекс збільшую
}
void random(Stack * st, int cap) //рандом
{
    int i, num;
    srand(time(NULL)); 
    for (i = 0; i < cap; i++) 
    {
        num = rand() % 10; 
        push(st, num);
    }
}
void pushStackFile(Stack * st) //запис в текстовий файл перший стек 
{
    FILE * fp = fopen("Stack.txt", "a");
    if (!fp) 
    {
        printf("\nНе вийшло відкрити файл..\n");
        return;
    }
    int elem;
    while (fscanf(fp, "%d", &elem) != EOF) 
    {
        push(st, elem);
    }
    fclose(fp);
}
void saveStackFile(Stack * st) //зберігаю
{
    FILE * fp = fopen("Stack.txt", "w"); 
    if (!fp)
    {
        printf("\nНе вийшло відкрити файл..\n");
        return;
    }
    int i;
    for(i = 0; i <= st -> top; i++)
    { 
        fprintf(fp, "%d\t", st->elem[i]); 
    }    
    fclose(fp);
}
void pushStackFILE(Stack * st2) //запис в текстовий файл ДЛЯ ДРУГОГО СТЕКА
{
    FILE * fp = fopen("StackTwo.txt", "a");
    if (!fp) 
    {
        printf("\nНе вийшло відкрити файл..\n");
        return;
    }
    int elem;
    while (fscanf(fp, "%d", &elem) != EOF) 
    {
        push(st2, elem);
    }
    fclose(fp);
}
void saveStackFILE(Stack * st2) //сохраняю ДЛЯ ВТОРОГО СТЕКА
{
    FILE * fp = fopen("StackTwo.txt", "w"); 
    if (!fp)
    {
        printf("\nНе вийшло відкрити файл..\n");
        return;
    }
    int i;
    for(i = 0; i <= st2 -> top; i++)
    { 
        fprintf(fp, "%d\t", st2->elem[i]); 
    }    
    fclose(fp);
}
int pop(Stack * st) //витягнути
{
    if(isEmpty(st))
    {
        printf("\nСтек порожній...\n");
        return;
    }
    if (st->top > 0) 
    {
        return st->elem[--st->top];
    }
    return -1;
}
void print(Stack * st) //Друк елементів
{
    int i;
    printf("\n------------\n");
    printf("\nСтек: ");    
    if(isEmpty(st))
    {
        printf("\nСтек порожній...\n");
    }
    else
    {
        for(i = st->top; i >= 0; i--)
        {
            printf("%d ", st->elem[i]);
        }
    }
    printf("\n------------");
    printf("\n\n");
}
void diff(Stack * st, Stack * st2, Stack * st3) //=начебто різниця.. але..
{
    int diff;
    while (!isEmpty(st) && !isEmpty(st2)) 
    {
        diff = pop(st) - pop(st2);
        push(st3, diff); 
    }
    while (!isEmpty(st)) 
    {
        push(st3, pop(st));
    }
    while (!isEmpty(st2)) 
    {
        push(st3, -1 * pop(st2)); 
    }
}
void menu() //Вибір між (стеками)
{
    int ch, cap;
    system("cls");
    while(1)
    {
        printf("\n------------------------\n");
        printf("------------------------\n");
        printf("Виберіть стек, який бажаєте заповнити\n");
        printf("|1| - Перший стек\n|2| - Другий стек\n|3| - Третій стек\n|0| - Завершення роботи програми\n");
        printf("\nВаш вибір --> ");
        scanf("%d", &ch);
        system("cls");
        switch(ch)
        {
            case 1:
                menu_stackone();
                break;
            case 2:
                menu_stacktwo();
                break;
            case 3:
                diff(st, st2, st3);
                printf("\nПерший");
                print(st);
                printf("\nДругий");
                print(st2);
                printf("\nТретій");
                print(st3);
                break;    
            case 0:
                exit(0);
                break;
            default:
                printf("\nМеню перегляньте спочатку..\n");
                break;        
        }
    }
}
void menu_stackone() //Меню першого стека
{
    int ch, element, cap;
    char filename[35];
    printf("Введіть розмір стеку:  ");
    scanf("%d", &cap);
    Stack * st = create(cap);
    system("cls");
    while(1)
    {
        printf("\n------------------------\n");
        printf("------------------------\n");
        printf("Яким чином здійснити введення інформації у вихідний стек?\n");
        printf("|1| - Читання з текстового файлу\n|2| - Введення з клавіатури\n|3| - Рандомні значення\n|4| - Вихід із пункту\n");
        printf("\nВаш вибір --> ");
        scanf("%d", &ch);
        system("cls");
        switch(ch)
        {
            case 1:
                printf("\nВведіть елемент: ");
                scanf("%d", &element);
                push(&st, element); //Заштовхую елемент у стек
                saveStackFile(&st); //записую у текстовий файл
                pushStackFile(&st); //зберігаю
                system("C:\\Windows\\System32\\notepad.exe Stack.txt"); //ДРУК!
                break;
            case 2:
                printf("\nВведіть елемент: ");
                scanf("%d", &element); //ввожу 
                push(st, element); 
                print(st);
                break;
            case 3:
                printf("\nЗаповнюю стек рандомними значеннями...\n");
                random(st, cap);
                print(st);
                break;    
            case 4:
                return menu();
                break;    
            default:
                printf("\nВи звісно можете щось клацнути, але програма не тільки для цього\n");    
                break;    
                
        }
    }
}
void menu_stacktwo() //меню для другого стека
{
    int ch, element, cap;
    printf("Введіть розмір стеку:  ");
    scanf("%d", &cap);
    Stack * st2 = create(cap);
    system("cls");
    while(1)
    {
        printf("\n------------------------------\n");
        printf("------------------------------\n");
        printf("Яким чином здійснити введення інформації у вихідний стек?\n");
        printf("|1| - Читання з текстового файлу\n|2| - Введення з клавіатури\n|3| - Рандомні значення\n|4| - Вихід із пункту\n");
        printf("\nВаш вибір --> ");
        scanf("%d", &ch);
        system("cls");
        switch(ch)
        {
            case 1:
                printf("\nВведіть елемент: ");
                scanf("%d", &element);
                push(&st2, element); //заштовхую элемент в стек
                saveStackFILE(&st2); //записую у текстовий файл
                pushStackFILE(&st2); //зберігаю
                system("C:\\Windows\\System32\\notepad.exe StackTwo.txt"); //друкк!
                break;
            case 2:
                printf("\nВведіть елемент: ");
                scanf("%d", &element); //ввожу лемент
                push(st2, element); 
                print(st2);
                break;
            case 3:
                printf("\nЗаповнюю стек рандомними значеннями...\n");
                random(st2, cap);
                print(st2);
                break;
            case 4:
                return menu();
                break;    
            default:
                printf("\nВи звісно можете щось клацнути, але програма не тільки для цього\n");    
                break;    
        }
    }
}

int main ()
{
    system("chcp 1251");
    menu();
    return 0;
}

4

(4 відповідей, залишених у C++)

Доброго вечора! У мене таке завдання було: Написати програму, яка зчитує текст із файлу (кілька пропозицій) та виводить його на екран. Після кожного речення друкується кількість символів у ньому.
Написала код, але некоректно виводиться кількість символів у рядку, а також взагалі зникає напис.
Ось код.

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#define max 150

int main ()
{
    setlocale(LC_ALL, "uk_UA.UTF-8");
    SetConsoleCP(1251);
    SetConsoleOutputCP(CP_UTF8); //
    FILE * fp;
    char words[max];
    fp = fopen("C:\\Users\\Аня\\Documents\\textt.txt", "r");
    if (fp == NULL) 
    {
        printf("\n\tПомилка відкриття файлу\n");
        exit(1);
    }
    while (fgets(words, max, fp) != NULL) 
    {
        printf("%s", words);
        printf("Кількість символів у рядку: %d\n", strlen(words));
    }
    fclose(fp);
    return 0;
}

fp = fopen("C:\\Users\\Аня\\Documents\\textt.txt", "r"); - Тут даю повноцінний шлях до файлу, який створила, бо інакше компілятор не бачить.
printf("Кількість символів у рядку: %d\n", strlen(words)); - "Кількість символів у рядку" взагалі зникає при компіляції, але саме число виводиться (невірно, додає приблизно 10-15 символів, тобто, якщо речення "Привіт", то воно напише не 6 символів, а 16-20).
Поясніть будь-ласка, у чому може бути справа? Невірно щось задане через консоль? Права на читання файлів .txt у мене є, усе нібито робе, сам текст файлу виводиться, а  printf("Кількість символів у рядку: %d\n", strlen(words)); - Ні

5

(6 відповідей, залишених у Java)

Будь ласка, пишіть які помилки вам видає компілятор.



Дякую за пояснення. Компілятор видає помилку при виклику функції в Main. Тобто, несумісні типи: void не можна перетворити на int[]. Тоді всеж таки повертати значення потрібно? Вибачте, якщо дурні запитання

6

(6 відповідей, залишених у Java)

koala написав:

Що конкретно не виходить? Яка помилка? Що цей код узагалі має робити?
Як питати, щоб отримати відповідь

Вибачте, дійсно погано описала ситуацію. Потрібно було написати програму де є консольне меню, але в switch-case використовувати методи: заповнення масиву випадковими числами, його друк і т.д.. У мене проблема така - дані із Main'a не передаються у методи (розмір та сам масив програма не бачить). Прошу про пораду, що конкретно при передачі даних написано невірно

Ось наприклад, це метод заповнення масиву випадковими числами до десяти. Це шматочок із коду вище. Програма видає помилку, взагалі не робить функція

 static int[] Filling (int size)
    {
        int[] array = new int[10];
        int i;
        for (i = 0; i < array.length; i++)
        {
            array[i] = (int) (Math.random() * 10);
        }
        return array;
    }

7

(6 відповідей, залишених у Java)

Добрий день чи вечір! Джаву вивчати почала не так давно, тому є помилки щодо передачу у функціі, бо є відмінності з той же мовою Сі. Мені потрібно передавати масив у метод, але я не зовсім розумію, як це правильно робити. Розумію, що в мене можжливо все з помилками, тому прошу про допомогу :')

import java.util.Scanner;
import java.util.Random;

public class PracticeThreeSecond
{
    public static void main (String[] args)
    {
        int i;
        int[] array = new int[10];
        Scanner scan = new Scanner (System.in);
        Random random = new Random();
        System.out.println("Вкажіть розмір масиву: ");
        int size = scan.nextInt();
        array = Filling(size);
        array = Print(size, array);
        array = Replace(size, array);
        array = Print(size, array);
        // System.out.println("----------------Меню----------------");
        // System.out.printf("|1| - Заповнення випадковими числами\n|2| - Змінити значення елемента масива\n");
        // System.out.printf("|3| - Відсортувати елементи масиву за зростанням\n|4| - Надрукувати масив\n|0| - Вихід");
    }
    static int[] Filling (int size)
    {
        int[] array = new int[10];
        int i;
        for (i = 0; i < array.length; i++)
        {
            array[i] = (int) (Math.random() * 10);
        }
        return array;
    }
    static void Print(int size, int array[])
    {
        int[] array = new int[10];
        int i;
        Scanner scan = new Scanner (System.in);
        for (i = 0; i < array.length; i++)
        {
            System.out.println(array[i]);
        }
    }
    static int[] Replace (int size, int array[])
    {
        int[] array = new int[10];
        Scanner scan = new Scanner (System.in);
        int i;
        System.out.println("Який елемент Ви бажаєте змінити?");
        int element = scan.nextInt();
        System.out.println("Яке значення підставити: ");
        int el = scan.nextInt();
        for (i = 0; i < array.length; i++)
        {
            if (i == element)
            {
                array[i] = el;
            }
            System.out.println(array[i]);
        }
        return array;
    }

}

8

(2 відповідей, залишених у C)

Добрий день, виконую практичну роботу.  "Реалізувати заповнення двовимірного масиву числами 0 - 9 двома способами:
- введення з клавіатури; «рандомні» значення. Роздрукувати отриманий масив" - усе зрозуміло крім одного, як зробити обмеження цифр, які вводяться? Програму я написала, але умови не виконуються. Тобто при введенні 10 або -1 програма підтримує значення. Підкажіть будь-ласка, як правильно потрібно зробити, щоб програма не давала ввести цифри, що не належать діапазону (заповнення масиву закінчувалося/перезапускалася)

int filling_outtwo (int *arr[N][M]) //введение с клавиатуры
{
    int k, p;
    int number;
    for (k = 0; k < N; k++)
    {
        for (p = 0; p < M; p++)
        {    
            printf("Arr[%d][%d] = ", k, p);
            scanf("%d", &number);
            if (number >= 9 || number <= 0)
            {
                printf("Error! Values are unacceptable! \n");
                break;
            }
        }
    }
}

9

(6 відповідей, залишених у C++)

koala написав:

Викладач довіряє вам самостійно обирати варіант.
Думаю, малося на увазі, що функція має бути проголошена, як function_args_ptr, але не викликати іншу функцію, а обчислювати всередині з вказівниками.

Дійсно, мабуть так і потрібно зробити. Дякую!

10

(6 відповідей, залишених у C++)

leofun01 написав:
MaxPluto написав:

Сама функція: y = 5/a^2 + tg(b^2), a та b відомі. a = 3, b = 1.2

... використовуються покажчики на значення змінних.

Яких ? (там багато варіантів)

#include <math.h>
#include <stdio.h>

float function_simple(float const, float const);
float function_args_ptr(float const *const, float const *const);
void function_result_ptr(float const, float const, float *const);
void function_all_ptr(float const *const, float const *const, float *const);

int main(int argc, char const *const *argv) {
    float a = 3.f, b = 1.2f, y = 0.f,
        *a_ptr = &a,
        *b_ptr = &b,
        *y_ptr = &y;
    {
        float (*f)(float const, float const)
            = function_simple;
        y = f(a, b);           // or
        y = f(*a_ptr, *b_ptr); // or
        *y_ptr = f(a, b);      // or
        *y_ptr = f(*a_ptr, *b_ptr);
        printf_s("y : %f,\t f addr : %p\r\n", y, f);
    } {
        float (*f)(float const *const, float const *const)
            = function_args_ptr;
        y = f(&a, &b);         // or
        y = f(a_ptr, b_ptr);   // or
        *y_ptr = f(&a, &b);    // or
        *y_ptr = f(a_ptr, b_ptr);
        printf_s("y : %f,\t f addr : %p\r\n", y, f);
    } {
        void (*f)(float const, float const, float *const)
            = function_result_ptr;
        f(a, b, &y);           // or
        f(*a_ptr, *b_ptr, &y); // or
        f(a, b, y_ptr);        // or
        f(*a_ptr, *b_ptr, y_ptr);
        printf_s("y : %f,\t f addr : %p\r\n", y, f);
    } {
        void (*f)(float const *const, float const *const, float *const)
            = function_all_ptr;
        f(&a, &b, &y);         // or
        f(a_ptr, b_ptr, &y);   // or
        f(&a, &b, y_ptr);      // or
        f(a_ptr, b_ptr, y_ptr);
        printf_s("y : %f,\t f addr : %p\r\n", y, f);
    }
    return 0;
}
float function_simple(float const a, float const b) {
    return 5.f / (a * a) + tan(b * b);
}
float function_args_ptr(float const *const a, float const *const b) {
    return function_simple(*a, *b);
}
void function_result_ptr(float const a, float const b, float *const result) {
    *result = function_simple(a, b); // or
    // *result = function_args_ptr(&a, &b);
}
void function_all_ptr(float const *const a, float const *const b, float *const result) {
    *result = function_simple(*a, *b); // or
    // *result = function_args_ptr(a, b); // or
    // function_result_ptr(*a, *b, result);
}

Щиро Вам дякую за такий приклад! :) На жаль, в мене самої недостатньо інформації з приводу завдання, викладач без потрібного контексту надсилає умови, тому дію як сліпе кошеня.

11

(6 відповідей, залишених у C++)

koala написав:

Локальні змінні в різних функціях - це РІЗНІ змінні. int a в main і int a в calc можуть мати різні значення. В calc ви їх ніяк не ініціалізуєте, відповідно і значення виходить неадекватним. Вам треба не проголошувати нові змінні в calc, а передавати a та b параметрами.
А ще 5/a*a для цілих дає, швидше за все, зовсім не той результат, на який ви розраховуєте, але оскільки ви вирішили не показувати нам умову, то я не можу вам нічого порадити.

Мені треба було написати програму, яка обчислює арифметичний вираз, при тому, що використовуються покажчики на значення змінних.
Сама функція: y = 5/a^2 + tg(b^2), a та b відомі. a = 3, b = 1.2

12

(6 відповідей, залишених у C++)

Добрий вечір! Виникли проблеми щодо використання покажчика. Створила відповідну функцію для вичислення y, але не розумію помилку, чому результат не виводиться. От відчуваю, що сліпа і відповідь на поверхні

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main ()
{
    int a, *p;
    p = &a; //adress of a
    float b, *pp; // 12/10 or 6/5
    pp = &b; //adress of b
    double y, *py; 
    py = &y;
    
    *p = 3;
    printf("a = %d \n", a);
    *pp = 1.2;
    printf("b = %f \n", b); // output on display data
    calc(py, a, b);
    printf("Solution result: %lf \n", y);
}
void calc (double *y) //function for calculation y
{
    int a;
    double b, tan(b);
    *y = (5/a*a)+tan(b*b); //formula 
}

13

(4 відповідей, залишених у C++)

koala написав:

А чому ви вирішили, що тут є помилка в коді? Що саме "не робить"?

Коли ввожу нуль у будь-якому порядку то все гаразд, але коли число без нуля, то видає одне і те саме "Zero is found"

14

(4 відповідей, залишених у C++)

Добридень. Виконувала завдання: Дано ціле чотиризначне число. Визначити, чи серед цифр числа є хоча б один
0. Як на мою думку, потрібно було ще використовувати "else", але воно не робить. Вкажіть мені про мою помилку, будь ласка.

#include <stdio.h>
#include <math.h>

int main() {
    int a; 
    int b, c, d, n;
    
    printf("Please enter a:\n");
    scanf("%d", &a);
    b = a % 100 / 100;
    c = a / 100; 
    d = a / 10 % 10;
    n = a % 10; 
    
    if (b == 0 || c == 0 || d == 0 || n == 0)
    {
        printf("Zero is found\n");
    }
    else {
        printf("Zero is not found\n");
    }
}