Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

Вот помню что где-то видел код для этого задания, но так и не смог найти. Так что прошу прощение если повторюсь.

Вот что надо написать на СИ.

"Подсчитать количество сдвоенных символов "сс" "нн" "лл" во введенном тексте."

Ссылка на комментарий
Поделиться на другие сайты

Students: Как я понял, любых сдвоенных символов? И, хм, а если символов три одинаковых подряд? Для простоты буду считать за пару символов каждое совпадение символа с предыдущим.

#include<stdio.h>main(){char s[255];int i,n=0;gets(s);for(i=1;s[i];i++)n+=s[i]==s[i-1];printf("%d\n",n);getchar();}
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

core:

Вероятно, надо переписывать функции symbol и nextchar, чтобы они работали и с числами. Впрочем, чужую программу переписывать с изменением функций - обычно легче заново написать, хотя и поглядывая в чужую программу. Тем более, что, например, у меня Borland C++ не установлен, а эта программа использует бибилиотеки, которых в моем компиляторе нет, соответственно не компилируется. А алгоритм преобразования в ОПН подробно описан, например, в Википедии.

Можно также придумать обходный путь, например, сначала все числа в строке заменить буквами (калькулятору вроде бы буквы не нужны, а если он должен работать и с алгебраическими выражениями, то в буквы, не встречающиеся в алгебре, например, кириллицу), преобразовать строку имеющейся программой, а потом заменить обратно буквы на числа. Если эта программа работает, то это самый простой путь.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Нет, проблем с числами или буквами нет. Но програма не работаетс числами у которых разряд больше 1.

или ты имееш ввиду делать что-то вроде:

343+234+123+12+32=a+b+c+d+f+g. Потом строку переводим в ОПН и подставляем обратно числа? Хм...а ето хорошая идея. Спасибо. Поше пробовать

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте! Помогите с программой на делфи или на паскале:

нужно упорядочить одномерный массив из 25 вещественных чисел по убыванию

Ссылка на комментарий
Поделиться на другие сайты

provirt:

const n=25;var i,j:integer; t:real; a:array[1..n]of real;begin writeln('Vvedite 25 chisel');for i:=1 to n do begin write(i:2,'-chislo? '); readln(a[i]) end;writeln('Ishodnij massiv'); for i:=1 to n do write(a[i]:10:3); writeln;for i:=1 to n-1 do for j:=1 to n-i do if a[j]<a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;writeln('Otsortirovannij massiv'); for i:=1 to n do write(a[i]:10:3); readlnend.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Задача 1

Сформировать массив Y из элементов массива Х(n); Y(i) определить, как сумму всех элементов Х(j), j<= i. Вывести оба массива.[/size][/size]

Задача 2

Дана матрица X(n, m) целых чисел. Получить новую матрицу, элементы столбцов которой меньше элементов исходной матрицы на величину минимального элемента соответствующего столбца исходной матрицы. Вывести исходную и полученную матрицы.

Очень нужно ...... от всей души буду благодарен :bye1:

Ссылка на комментарий
Поделиться на другие сайты

dimka-xd:

1.

var x,y:array[1..100]of integer; i,n:integer;beginwrite('length of array? '); readln(n);for i:=1 to n do begin write(i:2,'-chislo? '); readln(x[i]) end;writeln('Ishodnij massiv'); for i:=1 to n do write(x[i]:8); writeln;y[1]:=x[1]; for i:=2 to n do y[i]:=x[i]+y[i-1];writeln('Massiv summ'); for i:=1 to n do write(y[i]:8); readlnend. 

2.

var x,y:array[1..16,1..16]of integer; i,j,n,m,t:integer;beginwrite(' n m? '); readln(n,m);for i:=1 to n do for j:=1 to m do begin write('x[',i:2,',',j:2,'] ? '); readln(x[i,j]) end;writeln('Ishodnij massiv'); for i:=1 to n do begin for j:=1 to m do write(x[i,j]:8); writeln end;for j:=1 to m do begin t:=x[1,j]; for i:=2 to n do if x[i,j]<t then t:=x[i,j]; for i:=1 to n do y[i,j]:=x[i,j]-t end;writeln('Novij massiv'); for i:=1 to n do begin for j:=1 to m do write(y[i,j]:8); writeln end;readlnend.

Вообще-то такие вещи можно сначала и самому попробовать сделать, если не получится - другое дело.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

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

//---------------------------------------------------------------------------#include <iostream.h>#include <stdio.h>#include <vcl.h>class TStr2PPN {AnsiString instr, outstr;	 //input & output stringschar curc;					//the current characterint iin;					  //the index of the input stringchar nextChar();			  //get the next charactervoid begin();				 //handle plus & minusvoid mult_div();			  //handle multiplication & divisionvoid symbol();				//handle characters public:TStr2PPN() {				  //constructor   iin = 1;}void convert(char *str);	  //convert to PPNvoid digittostr (char *str);  //перевід виразу на буквиvoid strtodigit (char *str); // перевід з буков на числаAnsiString get_outstr();	  //get the output string};//get the next characterinline char TStr2PPN::nextChar() {  if(iin <= instr.Length()) return curc = instr[iin++];  return curc = '\0';}//get the output stringinline AnsiString TStr2PPN::get_outstr(){return outstr;}/*Перевід рядка з багаторозрядними числами в масив стрічок */void   TStr2PPN::digittostr (char *str){Char AllNumbers[15][15];int i=0,j=0,k=0,StrLen=0;instr = str;while (StrLen<instr.Length()){if(instr[strLen]>='0'&&instr[strLen]<='9') {AllNumbers[i][j]=instr[strLen]; outstr[k]=instr[strLen]; j++;} else{k++; outstr[k]=instr[strLen]; k++; i++;j=0;}StrLen++;}}//convert to PPNvoid TStr2PPN::convert(char *str) {  try {  instr = str;  outstr.SetLength(0);  iin = 1;  nextChar();  //begin the convertation  begin();  if(iin != (instr.Length()+1) || curc != '\0') {	 throw Exception("Syntax error");  }  if(isalpha(instr[instr.Length()]) && instr[instr.Length()]!=')') {	 throw Exception("Syntax error");  }  }  catch(...) {throw;}}//handle plus & minusvoid TStr2PPN::begin() {  try {   mult_div();   while(curc=='+' || curc=='-') {	  char temp = curc;	  nextChar();	  mult_div();	  outstr += temp;   }  }  catch(...) {throw;}}//handle multiplication & divisionvoid TStr2PPN::mult_div() {  try {   symbol();   while(curc=='*' || curc=='/') {	  char temp = curc;	  nextChar();	  symbol();	  outstr += temp;   }  }  catch(...) {throw;}}//handle charactersvoid TStr2PPN::symbol() {  try {  if(curc=='(') {	 nextChar();	 begin();	 if(curc!=')') {		throw Exception("Error: wrong number of brackets");	 }	 else nextChar();  }  else	 if(!isalpha(curc)) {		outstr += curc;		nextChar();	 }	 else {throw Exception("Syntax error");}  }  catch(...) {throw;}}#pragma argsusedint main(int argc, char* argv[]){  char expr[80];  TStr2PPN str;  while (1) {  try {	 cout << "Introduce the expression (use only letters, arithmetical" << endl;	 cout << "operations and brackets. Introduce 0 to exit the program)" << endl;	 scanf  ("%s",expr);	 if(expr[0] == '0') break;	 str.digittostr(expr);	/* str.convert(expr);  */	 cout << '\n' << "Result: " << str.get_outstr() << '\n' << endl;  }  catch(const Exception& exc) {	 cout << '\n' << exc.Message << '\n' << endl;  } }  return 0;}//---------------------------------------------------------------------------

Здесь дописал функцию digittostr которая записывает многоразрядные числа в масив строк и переводит строку в вид с одноразрядными числами.

Пока не идет речь об обратной замене на многорозрядные числа. Функцию проверил в Turbo C. Работает. тоисть при вводе строки примером:

234+123+345

програма выдаст результат

4+3+5, при етом сохранив 234, 123 и 345 в масиве соответственно AllNumbers[0],AllNumbers[1],AllNumbers[2].

Но на билдере выдает ошибку access violation при вызове функции. В чем проблема может быть?

Ссылка на комментарий
Поделиться на другие сайты

core:

Это надо бы пошагово отлаживать и смотреть, где возникает ошибка...

Вот мой вариант перевода строки a в строку b, в которой каждое число (считая числа состоящими только из цифр)заменяется заглавной латинской буквой (A..Z, числа в виде строк хранятся в массиве f с индексами строк, соответствующими кодам этих заглавных букв), а потом строка-результат b с заглавными буквами вместо чисел преобразуется обратно к исходной строке

#include<stdio.h>unsigned char a[255],b[255],f[255][10],i,j,k,l;main(){gets(a); l='A';for(i=j=0;a[i];i++,j++) {b[j]=a[i]; for(k=0;a[i]>='0'&&a[i]<='9';i++,k++)f[l][k]=a[i]; if(k){i--;f[l][k]=0;b[j]=l++;}}b[j]=0; puts(b); l='A';for(i=j=0;b[j];i++,j++) {if(b[j]<'A'||b[j]>'Z')a[i]=b[j];  else{k=0;while(f[l][k])a[i++]=f[l][k++];l++;i--;}}a[i]=0; puts(a); getchar();}

P.S. Можно и, как сделано у тебя, заменять числа не на заглавные латинские буквы, а на однозначные числа, тогда надо 'A' заменить на '0', а 'Z' на '9'.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Дана таблица названий и цен на N видов товаров по M магазинам. Вывести список магазинов, имеющих минимальные цены по заданному виду товара в формате: номер магазина, название и цену соответствующего товара. Магазины в списке расположить в порядке возрастания цены товара.

Ссылка на комментарий
Поделиться на другие сайты

Задали в универе задание по языку командного интерпретатора Shell (в Линуксе):

"Вывести на экран таблицу пользователей с обозначением запрещённых процессов (Process Id) и рассчитать время нахождения в системе для каждого пользователя"

Так вот, вопрос заключается в том, что мне не понять, что такое 'запрещённые процессы'. Должен быть какой-то список этих процессов для каждого пользователя? Какой командой вывести этот список?

А ещё не помню какой командой смотреть время начала работы какого либо юзера в системе..

зы. я нуб в Линуксе.

Ссылка на комментарий
Поделиться на другие сайты

DeaD_MoroZ:

Насчет юзеров - лучше всего подойдет, наверно, команда who. Нужные параметры посмотри в ее помощи (who -h). А насчет запрещенных процессов лучше спросить в разделе о Linux - я такого термина вообще не помню.

Ссылка на комментарий
Поделиться на другие сайты

Тролль, здрасте))

поможете?! :

"Дана целочисленная матрица размера m на n. Найти элемент, являющийся максимальным в своей строке и минимальным в своём столбце. Если таких элементов нет, то вывести 0."

вот что у меня получилось наданный момент:

program _;var a:array[1..100,1..100] of integer;m,n,i,j,maxi,minj:integer;beginwriteln('vvedite m i n:');readln(m,n);writeln('zadaite matricu:');for i:=1 to m dofor j:=1 to n doreadln(a[i,j]);writeln('matrica:');for i:=1 to m do beginfor j:=1 to n dowrite(a[i,j]:4);writeln;end;minj:=1;maxi:=1;writeln('iskomii element:');for i:=1 to m do beginfor j:=1 to n doif a[i,j]>a[i,j+1] then begin if maxi>i then maxi:=i;end;end;for i:=1 to m do beginfor j:=1 to n doif a[i,j]<a[i+1,j] then begin if minj<j then minj:=j; end;end;writeln(maxi:4,minj:4);if (maxi>0) and (minj>0) then writeln(a[maxi,minj])else writeln('0');end.

но почему то не всегда правильно работает...(

Ссылка на комментарий
Поделиться на другие сайты

Mike497:

program Minimax;var a:array[1..100,1..100]of integer; i,j,k,m,n,maxel,minel,p:integer;beginwrite('Введите размеры матрицы, разделив их пробелом: '); readln(m,n); writeln('Введите значения элементов по строкам, разделяя элементы строки');writeln('   пробелами и заканчивая ввод каждой строки нажатием Enter'); writeln;for i:=1 to m do   begin write('Строка ',i:2,': '); for j:=1 to n do read(a[i,j]); readln end; {ввели данные}writeln;for i:=1 to m do begin for j:=1 to n do write(a[i,j]:8); writeln end; writeln;{вывели исходную матрицу}p:=0; {счетчик найденных элементов}for i:=1 to m do beginmaxel:=a[i,1]; for j:=2 to n do if a[i,j]>maxel then maxel:=a[i,j];{нашли максимальное значение в строке}for j:=1 to n do if a[i,j]=maxel then  {a[i,j] является одним из максимумов строки}  begin	minel:=a[1,j]; for k:=2 to m do  if a[k,j]<minel then minel:=a[k,j];	{нашли минимальное значение в столбце}	if a[i,j]=minel then	  {этот максимум в строке равен минимуму в столбце}	  begin		p:=p+1; writeln('a[',i:2,',',j:2,']=',a[i,j]:6)	  end;  end; end;writeln; writeln('Всего минимаксов: ',p);readlnend.

Несколько замечаний и пояснений. Сначала общего характера, как составлять программу. Программа - это перевод решения задачи с уровня русского языка на уровень языка программирования. Поэтому сначала надо составить четкий план решения на русском языке. Если как решить задачу не вполне ясно уже на уровне описания условия или решения на русском языке, дальше будет только хуже. Хотя, конечно, и при правильном описании решения на русском языке перевод может быть неправильным :).

Теперь к нашим баранам. Во-первых, соображаем, что такое максимум и минимум. Они бывают разные - бывают локальные и глобальные, строгие и нестрогие... Обычно под максимумом понимается глобальный нестрогий максимум (см. Википедию). Теперь, когда мы знаем, что ищем, полдела сделано. Теперь легко описать решение на человеческом языке: для каждой строки ищем ее максимальные элементы (их может быть несколько :doh: ) и для каждого из них проверяем, не является ли его значение минимальным в своем столбце. Если нашли такой элемент - ура! Если всю матрицу просмотрели, а такого не нашли - тоже ура, только другое :)

Как найти максимальные элементы в строке? Пробежаться сначала по всей строке и найти максимальное значение элементов в ней. Потом снова идем по строке и сравниваем значение каждого элемента с найденным максимумом. Если совпало - наш элемент максимальный.

А как найти это самое максимальное значение элементов в строке? Примем сначала за максимальное значение значение первого элемента. Потом проходим по строке и если какой-то элемент имеет значение больше прежнего максимума, поднимаем значение максимума до уровня этого элемента.

С нахождением минимального значения в столбце - аналогично, только проверяем не на "больше", а на "меньше".

Вот и все: теперь можно кодировать (ну, вообще-то надо еще решить, как вводить данные, что и как выводить... но это дело наживное, оформление всегда можно откорректировать, оно бросается в глаза, в отличие от ошибок в алгоритме).

Да, в программе можно было прервать выполнение программы после первого найденного подходящего элемента - этого достаточно для ответа, а я заставил программу всегда просматривать всю матрицу до конца и выводить список всех подходящих элементов. Это при желании легко изменить.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Mike497:

Ну, я подробно прокомментировал в ответ на то, что у тебя написано, что твоя программа "почему то не всегда правильно работает...(". Я и постарался показать, как написать так, чтобы работала - не только готовый результат без комментариев, а и немного "кухни"... :)

Ссылка на комментарий
Поделиться на другие сайты

Дана таблица названий и цен на N видов товаров по M магазинам. Вывести список магазинов, имеющих минимальные цены по заданному виду товара в формате: номер магазина, название и цену соответствующего товара. Магазины в списке расположить в порядке возрастания цены товара.

Ссылка на комментарий
Поделиться на другие сайты

http://www.softboard.ru/index.php?showtopi...st&p=441047

по поводу етого сообщения. В общем там нет разницы во что переводить - нужно всего то образовать выражение с односимвольными операндами. Потом и так обратно подставлять значения будет одинаково - по порядку из масива вытаскивать из масива числа. В моем варианте просто оставляется последняя цыфра числа. Возможно ошибка из-за несоответствия между текстовыми типами даных - там и char и ansistring... хотя врятли

Ссылка на комментарий
Поделиться на другие сайты

Потом и так обратно подставлять значения будет одинаково - по порядку из масива вытаскивать из масива числа.
Да, если числа вытаскиваются просто в обратном порядке, то можно обойтись даже одним любым неиспользуемым символом, который будет означать просто подставить очередное число.
Ссылка на комментарий
Поделиться на другие сайты

dimka-xd:

var name:array[1..50]of string[30]; price:array[1..50,1..50]of real; {[n,m]} b:array[1..50]of boolean; n,m,i,j,k,l,p:word; r:real; beginwrite('number of articles? '); readln(n); write('number of shops? '); readln(m);for i:=1 to n do begin write('name of article number ',i:2,': '); readln(name[i]); for j:=1 to m do begin write('  price in the shop ',j:3,' ? '); readln(price[i,j]); end end;repeatwrite('number of the article (or 0 for exit)? '); readln(p); if p=0 then break;write('how many shops to show? '); readln(k);for i:=1 to m do b[i]:=true;for i:=1 to k do begin r:=1e6; for j:=1 to m do if b[j]and(price[p,j]<=r) then begin r:=price[p,j];l:=j end;  writeln(l:4,name[p]:30,price[p,l]:8:2); b[l]:=false end;until false;end.

В задаваемых вам программах практически ничего нет, кроме ввода-вывода. Тут не надо почти ничего, кроме продумывания, как должен выглядеть ввод-вывод. Если бы что-то не получалось с алгоритмом решения, другое дело. А то тупо писать - введем то... введем это... можно и самому.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

и вот если не сложно посмотрите....... :)

Дан список N рабочих цеха и количество изготовленных каждым из них деталей по K дням. Вывести по дням число рабочих, которые изготовили деталей больше, чем на данный день в среднем по цеху, фамилии рабочих, изготовивших по дням наибольшее число деталей (с указанием этого числа) и рабочего, изготовившего в целом наибольшее число деталей.

Ссылка на комментарий
Поделиться на другие сайты

dimka-xd:

Посмотрел... Практически то же самое, вместо товара детали. Суммируем матрицу вдоль и поперек. Находим среднее. Находим максимум. И пишем: хорошие рабочие... лучшие рабочие... лучшие из лучших... Скучно... :(

Ты мог бы это и сам сделать, ориентируясь на решение предыдущей задачи.

var name:array[1..50]of string[20]; det:array[1..50,1..50]of word;   n,m,i,j,k,s:word; r:real; beginwrite('number of workers? '); readln(n); write('number of days? '); readln(k);for i:=1 to n do begin write('name of worker with the number ',i:2,': ');   readln(name[i]); for j:=1 to k do begin write('  number of details in the day ',j:3,' ? ');   readln(det[i,j]); end end;for j:=1 to k dobegin  s:=0; m:=0; for i:=1 to n do begin s:=s+det[i,j];			if det[i,j]>m then m:=det[i,j] end;   r:=s/n;  s:=0; for i:=1 to n do if det[i,j]>r then s:=s+1;  writeln('  day ',j:3,'	the number of the good workers: ',s:3);  writeln('	the best: '); for i:=1 to n do if det[i,j]=m then 	writeln('			   ',name[i]:-20,' produced ',m:3,' details');  end;s:=0; for i:=1 to n do 	begin m:=0; for j:=1 to k do m:=m+det[i,j]; if m>s then s:=m end;writeln('the best of the bests: ');for i:=1 to n do begin m:=0; for j:=1 to k do m:=m+det[i,j]; if m=s then writeln('   ',name[i]:20,'  - ',m:4,' details') end;readlnend.

P.S. Немного подправил - сначала забыл для лучшего рабочего вывести и количество сделанных им деталей.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...