2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Помагите решить задачку по програмированию
Сообщение11.07.2006, 13:54 


15/04/06
19
Мне нужно решыть задачу а точнее написать програму, это задание с практики в юнивере, но есть небольшая проблемма, Я ВООБЩЕ НЕЗНАЮ Борлан С: мож кто напишет прогу,а пожалуйста.

Данные целые числа p,q,a1..., a67(p>q тут значек > или равно пставлю так >= 0) В
последовательности а1...,а67 заменить нулями члены,модуль которых при делении на p дает в остатке q.


Вот и вся задачка, токо как ее решить я без понятия :(

 Профиль  
                  
 
 
Сообщение11.07.2006, 14:05 
Экс-модератор
Аватара пользователя


23/12/05
12064
А давайте для начала без привязки к конкретному языку программирования (не знаете Borland C - и Бог с ним), прорисуем алгоритм.

Я Вам даже намекну. В MatLAB это пишется в одну строку
Код:
a.*(mod(abs(a),p)~=q)

где a - массив [a1,a2....a67].

Осталось расшифровать, что я тут сделал :wink:

 Профиль  
                  
 
 
Сообщение11.07.2006, 23:19 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
Хм, из поста про MatLab я ничего не понял, думаю, и автор темы --- тоже. Хотя как задачку решать - мне ясно. Давайте попробуем спросить - а Вы вообще хоть какой-нить язык программирования знаете? Ну паскаль, бейсик... или тот же C?

Потому что в решении такой задачи (да и многих других задач!)есть два этапа: 1. построить алгоритм, плюя на язык, 2. закодировать алгоритм на данном языке.

Если трудности в шаге 1, то вот набросок. Пусть числа a[i] (i = 1..67) организованы в массив (что бы это ни значило). Для каждого элемента массива (т.е. для каждого a[i]) нужно выполнить простую операцию: узнать его остаток при делении на p и сравнить его с q, в последнем случае положить a[i] <--- 0.

Если непонятки именно с шагом 2, то напишите прогу на любом другом известном Вам языке. Потом переведём на Borland C.

 Профиль  
                  
 
 
Сообщение12.07.2006, 11:16 
Экс-модератор
Аватара пользователя


23/12/05
12064
DMVN писал(а):
Хм, из поста про MatLab я ничего не понял, думаю, и автор темы --- тоже.

Поясню:
У нас есть одномерный (хотя в моем примере это несущественно) массив a - неважно каким образом он задан.
Например зададим
Код:
a=[1 -2 3 -4 5 -6...]

Тогда
Код:
abs(a)
создает массив модулей элементов исходного массива.
Получим $[\text{1 2 3 4 5 6...}]$
Код:
mod(...,p)
создает массив остататков от деления полученных модулей на $p$. Например, для $p=3$ мы получим
$[\text{1 2 0 1 2 0...}]$
наконец $...\thicksim =q$ - не равно, возвращает массив, в котором для всех элементов предыдущего нашего массива будут единицы, если эти элементы не равны $q$ и нули - если равны.
Например, при $q=2$ получим: $[\text{1 0 1 1 0 1...}]$
и последнее $.*$ - поэлементное умножение исходного массива $a=[\text{1 -2 3 -4 5 -6...}]$ и массива с нулями и единицами: умножение на единицу, не изменяет элемент, а умножение на ноль дает ноль - как раз то, что нам нужно: $[\text{1 0 3 -4 0 -6...}]$

Собственно, алгоритм написан (правда, для С он будет не оптимален, но...)

 Профиль  
                  
 
 
Сообщение13.07.2006, 00:21 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
Да, забавная вещь MatLAB :) Но, думаю, проблемы у человека всё же именно с кодировкой --- алгоритм-то предельно прост - ну на уровне здравого смысла всё ясно... Из наших постов уже заведомо ясно, КАК нужно делать (почти в терминах C/C++), но автор пока не торопится спрашивать дальше. Неужели ждёт готовых решений?

 Профиль  
                  
 
 
Сообщение13.07.2006, 08:23 


15/04/06
19
DMVN писал(а):
Да, забавная вещь MatLAB :) . Неужели ждёт готовых решений?

Ребят ну правда вообще не шарю, :( что говорить если мля сам учитель не шарит, а будет просто смотреть в методичке правильно ли я написал, если кому не сложно напишите пожалуйста програму.

Вроде язык програмирования не важен можно или в паскаль или в с++ или в еще каком :).

Если не принесу эту задачку не переведут на 3 курс :(... Что я делаю на факультете програмирования?... неспрашивайте я уж и сам не знаю =), хочу скорее закончить юнивер и пойти переквалифицироваться на економиста так как понял что всетаки програмирование это не моё. А щас уже нельзя перевестись на економику ток на 1 курсе можно было.

Если уж несложно напишите поностью задачку :). Заранеее всем огромное спасибо.

 Профиль  
                  
 
 
Сообщение13.07.2006, 09:10 
Основатель
Аватара пользователя


11/05/05
4312
Киса, ты с какова горада? (с)
Это где на 2 курсе факультета программирования дают такие задачи, причем препод проверяет их правильность по методичке???

 Профиль  
                  
 
 
Сообщение13.07.2006, 12:56 


15/04/06
19
Украина =), у мееня просто принимает задачу не учитель а отвественій за практику, а он нефига нешарит. Мож всетаки ктото напишет програму 8-)

 Профиль  
                  
 
 
Сообщение13.07.2006, 13:38 
Экс-модератор
Аватара пользователя


23/12/05
12064
vanhalsing писал(а):
Украина

... Это не в нашем вузе точно. :evil:

 Профиль  
                  
 
 
Сообщение13.07.2006, 15:03 


13/07/06
68
вот решение на лиспе, раз уж язык неважен:
Код:
(defparameter p 3)
(defparameter q 1)
(defparameter seq '(0 1 2 3 4 5 6 7 8 9 10 11 12))

(format t "~S~%" (mapcar (lambda (x) (if (eq q (mod x p)) 0 x)) seq))

Введи свои значения в p, q, seq.

Учи лисп, он прост и в жизни пригодится.

 Профиль  
                  
 
 
Сообщение14.07.2006, 12:20 


15/04/06
19
Спасибо :).

П.С. У нас в юнивере Лиспу не преподают ))

 Профиль  
                  
 
 
Сообщение14.07.2006, 12:39 
Основатель
Аватара пользователя


11/05/05
4312
А что у вас преподают?

 Профиль  
                  
 
 ну вот Вам на кошерном C
Сообщение14.07.2006, 16:28 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
Код:
#include <stdio.h>
#include <stdlib.h>
#define MAX 67

int main()
{
  int seq[MAX]; // массив с нашей последовательностью seq[0]..seq[66] (с нуля, а не с 1!)
  int p,q;         // типа, объявляем переменные
  printf("Enter p: ");
  scanf("%d", &p);  // вводим их...
  printf("Enter q: ");
  scanf("%d", &q);  // ...с клавиатуры
  printf("Filling sequence with random numbers...\n");
  for (int i = 0; i < MAX; i++) seq[i] = rand() % 100 - 50; // заполняем случайными числами
  printf("Initial sequence:\n");
  for (int i = 0; i < MAX; i++) printf("%d ", seq[i]);
  printf("\n");
  for (int i = 0; i < MAX; i++)
  {
    if (abs(seq[i]) % p == q)
      seq[i] = 0;
  }
  printf("Processed sequence:\n");
  for (int i = 0; i < MAX; i++) printf("%d ", seq[i]);
  printf("\n");
  return 0;
}

 Профиль  
                  
 
 Re: ну вот Вам на кошерном C
Сообщение14.07.2006, 17:00 


14/07/06
1
Moscow
ИМХО, зря ты ему написАл. Через полгода прибежит опять, и опять чего-нибудь выпросит. Так никогда ничему не научиться

 Профиль  
                  
 
 Re: ну вот Вам на кошерном C
Сообщение15.07.2006, 12:50 
Заслуженный участник
Аватара пользователя


09/07/05
210
МехМат МГУ
eXire писал(а):
ИМХО, зря ты ему написАл. Через полгода прибежит опять, и опять чего-нибудь выпросит. Так никогда ничему не научиться

Вопрос о корректности моих действий уже был оговорен в ЛС с г-ном модератором раздела. Если бы был энтузиазм у автора темы, мои действия были бы иными. Предлагаю вопрос о том, стОит ли отвечать на подобные просьбы, в ДАННОМ разделе НЕ вести.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group