Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Простая программа на С.. что то я портачу )  (Прочитано 1492 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sponger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Ребята всем привет!..
Помогите пожалуйста разобраться с небольшой проблемкой в программе написанной на С..

Условие:
   Дано целое число n. Вычислить 2 в степени n.

Решение:
#include <stdio.h>
#include <math.h>
int main()

{
  int n;
  float a;
  printf ("Vvedite n: \n");
  scanf ("%f", &n);
  a=pow(2,n);
  printf ("%f \n", a);
  return 0;
}

Компилирую в терминале gcc laba1.10.c -o laba1.10
во время комниляции ошибка:

/tmp/ccYRt3mM.o: In function `main':
laba1.10.c:(.text+0x49): undefined reference to `pow'
collect2: выполнение ld завершилось с кодом возврата 1

Подскажите как с этим побороться?

У меня такое подозрение что либо я неправильно использую pow или не правильно пользуюсь типами данных  :-[...

Оффлайн igel

  • Новичок
  • *
  • Сообщений: 41
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #1 : 05 Августа 2008, 12:18:08 »
Чтобы избавиться от ошибки сборки: добавить опцию -lm
Но работать всё равно не будет: Вы пытаетесь прочитать целое число, используя спецификатор формата для вещественного %f, надо - %d.
Ну и вычислять 2^n через pow - несколько неоптимально  ;), но если таково задание лабы, то пусть будет...

Оффлайн kayrick

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #2 : 05 Августа 2008, 12:36:45 »
если n неотрицательное то проще всего сдвигом
2^n == 1<<n

Оффлайн kayrick

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #3 : 05 Августа 2008, 13:53:02 »
#include <stdio.h>
int main()
{
   int n;
   printf("Specify arg\n>>");
   scanf("%d",&n);
   if(n>=0) printf("%d",1<<n);
   else printf("%f",(double)1/(1<<abs(n)));
   return 0;
}
//что-то такое я полагаю)

Оффлайн sponger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #4 : 06 Августа 2008, 00:41:26 »
Всем спс разобрался!  :P

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #5 : 06 Августа 2008, 05:57:54 »
...
Компилирую в терминале gcc laba1.10.c -o laba1.10
во время комниляции ошибка:

/tmp/ccYRt3mM.o: In function `main':
laba1.10.c:(.text+0x49): undefined reference to `pow'
collect2: выполнение ld завершилось с кодом возврата 1

Подскажите как с этим побороться?
Не только с типами касяк но и просто ты читать не умеешь.
Код: ("man pow") [Выделить]
...
       Link with -lm.
...
надо было набирать gcc laba1.10.c -o laba1.10 -lm
Но на самом деле все проще
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv) {
    int i, n, res = 1;
    printf("Введите n: ");
    scanf("%d", &n);
    for (i = 0; i < n; ++i) {
        res *= 2;
    }
    printf("2^%d = %d\n", n, res);
    return (EXIT_SUCCESS);
}

Оффлайн mkarasik

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #6 : 09 Августа 2008, 18:08:19 »
а-а-а-а

for (i = 0; i < n; ++i) {
        res *= 2;
    }

не помогайте ему больше, не надо нам такие программисты

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Простая программа на С.. что то я портачу )
« Ответ #7 : 12 Августа 2008, 07:54:57 »
Зато понятно

 

Страница сгенерирована за 0.041 секунд. Запросов: 25.