Форум - Программирование
Форум

Форум (http://barca.ru/forum/index.php)
-   Hi-tech (http://barca.ru/forum/forumdisplay.php?f=40)
-   -   Программирование (http://barca.ru/forum/showthread.php?t=976)

Catala 14.03.2012 21:05

PHP код:

#include <conio.h>
#include <stdio.h>
void main()
{

    
int x
 
    for(
10<= 99x++)
    {
        if (((
10) * (10) + (10) * (10)) % 13 == 0)
        {
            
printf("x = %d\n"x);
        }
    }
     
    
getch();



К@t@LoNeЦ 16.03.2012 18:42

Вложений: 2
Вот еще проблема с задачей (рс.1)

Т.е, проще говоря, если я ввиду n=5 , то вот что должно получиться (рс.2)

Как это мне записать?

заготовка и ошибка (рс.2)

Catala 16.03.2012 18:53

PHP код:

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

void main()
{
    
float result 0;
    
int i;
    
int n;

    
printf("Input a number: ");
    
scanf("%d", &n);

    for(
0ni++)
    {
        
result sqrt(result 2);
    }

    
printf("The result is %f"result);

    
getch();



К@t@LoNeЦ 16.03.2012 18:57

Catala, уф , спасибо огромное, мне бы тока одной строчки хватило:bowdown:

К@t@LoNeЦ 13.04.2012 18:43

Дан массив целых чисел размерности n. Все элементы массива с четными номерами, предшествующие первому максимальному элементу, умножить на максимальный

Предпоследний цикл считает до бесконечности.
В чем ошибка?

PHP код:

#include <conio.h>
#include <math.h>
#include <stdio.h>
void main()
{
    
    
int max,n,k,i;
    
printf("vvedite razmernost ");
    
scanf_s("%d",&n);
    
int *mass = new int[n];
    
delete[]mass;
    

    for (
i=1;i<=n;i++)   
    {
          
printf("vveite chislo ");
          
scanf_s("%d",&mass[i]);
    }

    
max=mass[1];
    
k=1;
    
    for (
i=2;i<=n;i++)
      {
          if (
mass[i]>max)
             { 
                 
max=mass[i];
                 
k=i;
             }
          
      }

    for (
i=1;1<=k;i++)
    {
        if (
32000%i==0)
             {
                 
mass[i]=mass[i]*max;
             }
    }

    for (
i=1;1<=n;i++)
    {
        
printf("mass[i] =%lf",mass[i]);
    }

    
getch();



GERONIMO 13.04.2012 18:55

Цитата:

Сообщение от К@t@LoNeЦ
printf("vveite*chislo*");


Я ничего не смыслю в программировании, но тут ты пропустил букву :"d"

Catala 13.04.2012 19:06

Во-первых, массивы идут от 0 до n-1. Обращение к элементу n должно вызывать access violation. Во-вторых, память освобождается в самом начале программы, то есть вся работа ведется без выделенной памяти. Это еще до того, как вникнуть в алгоритм, который выглядит странно. Как собственно и задача. Что такое "первый максимальный элемент"? Если есть несколько одинаковых элементов, которые являются максимумом, нужен с минимальным индексом?

К@t@LoNeЦ 13.04.2012 19:17

Цитата:

Сообщение от Catala
Во-первых, массивы идут от 0 до n-1.

Необязательно.Я ввожу, начиная с mass[1].Ведь в for сначала идет присвоение элемента ,а потом увеличение номера элемента

Цитата:

Сообщение от Catala
Обращение к элементу n должно вызывать access violation.

В первый раз слышу.Всегда работал без него.

Цитата:

Сообщение от Catala
Это еще до того, как вникнуть в алгоритм, который выглядит странно.

какой именно? предпоследний?



В предпоследнем цикле сначала было "if (i%2==0)",что правильнее при определении четности\нечетности, но проблема в том, что i должно быть целочисленным, поэтому решил пойти от обратного:
по идее если i - четное, то он должен делить без остатка 32000 ( к примеру)

Catala 13.04.2012 19:28

Цитата:

Сообщение от К@t@LoNeЦ
Необязательно.Я ввожу, начиная с mass[1].Ведь в for сначала идет присвоение элемента ,а потом увеличение номера элемента

Интересно вас учат. Объясняю. Допустим массив начинается в адресе 1000. Когда ты делаешь new int[5] операционная система выделяет тебе сплошной блок памяти размеров в 20 байт(int 4 байта). mass[i] это то же самое, что *(mass + (4 * i)). Поэтому обращение к mass[5] это обращение к адресу 1020, которое тебе не принадлежит. И не имеет никакого значения как ты вводишь элементы. Ввод элементов это не выделение памяти, а запись данных в уже выделенную. В C всегда массив начинается с нуля. Если ты хочешь использовать n элементов начиная с 1, то в new нужно давать n+1. Ты же вообще делаешь в начале delete, что освобождает память и для тебя она не существует, а потом обращаешься к памяти которая не была твоей даже до этого освобождения.

Переменная k тебе не нужна. В условии второго пробега достаточно mass[i] < max. Ну и у тебя слева в условии цикла 1 вместо i. 32000 очень надеюсь нужно только для проверки.

К@t@LoNeЦ 13.04.2012 19:43

Цитата:

Сообщение от Catala
Переменная k тебе не нужна.

как мне тогда без k номер максимального элемента то узнать?

Цитата:

Сообщение от Catala
Ну и у тебя слева в условии цикла 1 вместо i

не понял, где именно?


Цитата:

Сообщение от Catala
Интересно вас учат. Объясняю. Допустим массив начинается в адресе 1000. Когда ты делаешь new int[5] операционная система выделяет тебе сплошной блок памяти размеров в 20 байт(int 4 байта). mass[i] это то же самое, что *(mass + (4 * i)). Поэтому обращение к mass[5] это обращение к адресу 1020, которое тебе не принадлежит. И не имеет никакого значения как ты вводишь элементы.


int *mass = new int[n];
delete[]mass;

может и так, только нам пока так говорят заполнять динаический массив


08 апреля 2025 года. Вторник - 19:49 (Часовой пояс GMT +4).

Русский vBulletin v3.5.2, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Перевод сделал zCarot