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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Программа, вычисляющая число сочетаний c из n по k на Паскале.  (Прочитано 7207 раз)

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

Оффлайн Walter Milberght

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Приветствую всех. Задача, значит, такая, какая написана в названии. Пишу в Делфи7, ч/з Wine, иногда выбираюсь в Виндовоз, для лучшего запуска  .exe - шников.

Код сабжевой программы, решаю ч/з треугольник Паскаля:

program C_iz_n_po_k;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  A:array of longword;
  i,j,k,n:longword;
begin
  writeln('Input n and k ');
  writeln('Input n');

  read(n);
  writeln('Input k');
  read(k);

  setlength(A,k+1);
  for i:=0 to k do
  A[i]:=1;
  for j:=1 to n-k do
  A[i]:=A[i]+A[i+1];
  writeln('C iz n po k = ', A[k]);
end.


Проблема такова: После введения с клавиатуры первого числа, второе вводится и больше ничего не происходит - поле ввода закрыто, программа ничего не делает, а впридачу и виснет намертво. Что в ней не так? Или как решить ее через Бином Ньютона?
Все для нации, ничего против нации, нация превыше всего!

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Walter Milberght, погугли Lazarus и познаешь просветление... Оно даже кроссплатфоменное...

Пользователь решил продолжить мысль 03 Ноября 2012, 20:38:31:
Дельфин - борландовское ответвление паскаля, не очень хорошее и совсем неудачное.
Я вернулся...

Оффлайн Walter Milberght

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Неудачное? А почему его тогда пользуют почти все, кто в паскале дальше "Write('hello')" уйти хочет? И Я не спрашиваю насчет среды - она меня устраивает - а насчет кода.
Все для нации, ничего против нации, нация превыше всего!

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Walter Milberght, это субъективно. Я тоже в далеком 2005 году писал код на дельфине. Потом забросил. А используют - Борланд распиаренный коммерческий продукт, а лазарус нет. Кроме того насколько я помню борланд продвигает свои продукты в образовательные учреждения, чтобы он стал "де факто" стандартом.

Напиши это
for i:=0 to k do
  A[i]:=1;
  for j:=1 to n-k do
  A[i]:=A[i]+A[i+1];
  writeln('C iz n po k = ', A[k]);
Словами, покажу почему паскалем не пользуются... Хотя сравни:
Цитировать
program C_iz_n_po_k;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  A:array of longword;
  i,j,k,n:longword;
begin
  writeln('Input n and k ');
  writeln('Input n');

  read(n);
  writeln('Input k');
  read(k);
и тот же код на си
#include <stdio.h>
main()
{
#include <stdio.h>
void main () {
float i, j, k, n;
printf("Input n and k \n Input n");
scanf(n);
printf("Input k );
scanf(k);
};

Пояснять еще надо?
Я вернулся...

Оффлайн Walter Milberght

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Тогда уж вообще некрофилией не заниматься, и на плюсах писать надо. Только вот в универе нужен именно паскаль. А вообще, моя б воля, я им на брейнфаке писал бы, с кодом в одну строку.
Все для нации, ничего против нации, нация превыше всего!

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
В "си против си++" есть свои не видимые в начале тонкости. Хотя код на си++ не сильно отличается от приведенного выше. В коде ошибиться, но на си++ вроде будет так:

#include <iostream>

main()
{
void main () {
double i, j, k, n;
cout << "Input n and k " << endl;
cout  << "Input n " << endl;
cin >> n;
cout  << "Input k " << endl;
cin >> k;
};
Я вернулся...

Шинш

  • Гость
astrobeglec,
несовсем )

Цитировать
#include <iostream>

using namespace std;
int main ()
{
double i, j, k, n;
cout << "Input n and k " << endl;
cout  << "Input n " << endl;
cin >> n;
cout  << "Input k " << endl;
cin >> k;
return 0;
};

и разве scanf не требует формата принимаемого типа?
в данном случае scanf ("%f", &n);

P.S. на C++ нам препод так и не преподавала cin/cout, правда у нее стаж ой-ей-ей, вот видимо и сказывается...
поверхностно прошли, но всегда использовали на лекциях scanf/printf. А там уже кто как хочет.

Пользователь решил продолжить мысль 03 Ноября 2012, 22:17:02:
Walter Milberght,
Цитировать
  for i:=0 to k do
     A:=1;
  for j:=1 to n-k do
     A:=A+A[i+1];

падает как видно потому что цикл виснет 2й. не I а J надо писать...

Пользователь решил продолжить мысль 03 Ноября 2012, 22:18:02:
Walter Milberght,
и проверки потом включить бы, а то и дальше повесить можно ее...
« Последнее редактирование: 03 Ноября 2012, 22:18:02 от Шинш »

Онлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Walter Milberght,
  for i:=0 to k do
     A:=1;
  for j:=1 to n-k do
     A:=A+A[i+1];
А переменная j зачем нужна?
Извините, я все еще учусь

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Шинш, сразу признаю твою правоту. После операции пока плохо соображаю...
Я вернулся...

Оффлайн Walter Milberght

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Так что именно писать? А то я запутался малость - все матан на уме, а программирование туда лезет как-то искаженно и туговато (в последнее время)...
Все для нации, ничего против нации, нация превыше всего!

Шинш

  • Гость
Walter Milberght,
вместо

Цитировать
or j:=1 to n-k do
     A:=A+A[i+1];

например

Цитировать
or j:=1 to n-k do
     A:=A+A[j+1];

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

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
И не стоит забывать про проверку входных данных. Ну, чтобы не отрицательные и числовые были.
Walter Milberght, пиши функцию вычисления факториала. :)
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Шинш

  • Гость
Protopopulus,
+1, про это я в пред посту писал (про проверку входных) )
не помню зачем факториал в Паскалевом треугольнике правда, надеюсь вспомню по утру завтра ))

Оффлайн Walter Milberght

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Факториал в Паскалевом треугольнике нужен как собаке пятая нога, то есть, никак. Исправил код, скомпилил - программа при вводе любых чисел (положительных) завершается с непонятной ошибкой, причем завершается с такой скоростью, что прочитать невозможно.
Все для нации, ничего против нации, нация превыше всего!

Онлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Walter Milberght,
Ошибка точно в непонятной строке
Извините, я все еще учусь

 

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