Faits:
Faits:
A. Par contrat des 28 juillet et 4 août 1997, Y._ SA (ci-après: Y._) s'est engagée à exécuter, dès le 1er août 1997, des prestations de maintenance pour le compte de X._ Sàrl (ci-après: X._). Ces prestations consistaient à prendre en charge tous les frais pour l'entretien de l'équipement du système d'impression «Z._» (art. 1) et incluaient une maintenance normale effectuée quatre fois par année (art. 5). Les interventions consécutives à une panne devaient être effectuées au plus tard dans les huit heures (art. 6). Les frais d'entretien, qui se montaient à 3'010 fr. par mois hors taxe (art. 10), ne comprenaient pas les réparations ou échanges de pièces pour cause d'accident, de négligence, d'utilisation non conforme, etc. (art. 3). De son côté, afin d'assurer le bon fonctionnement de l'équipement, X._ s'engageait «à utiliser les produits, pièces, fournitures ou consommables conformes aux normes fournies par Y._» (art. 2B).
Aux mêmes dates, les parties ont signé une annexe à ce contrat, valable également dès le 1er août 1997. Celle-ci prévoyait l'entretien du logiciel des installations d'héliocopie et de photocopie en contrepartie du paiement d'une mensualité de 500 fr. hors taxe. Ces deux contrats étaient conclus pour une durée d'une année, puis se renouvelaient automatiquement d'année en année, sauf résiliation écrite d'une partie, au moins trois mois avant la date d'échéance (art. 12).
X._ s'est plainte à plusieurs reprises auprès de Y._ de retards dans la livraison et de défauts des produits et consommables achetés auprès d'elle. En raison de ces défauts, Y._ a établi plusieurs notes de crédit en faveur de X._. Le 10 février 1999, X._ a encore adressé de tels griefs; elle a également contesté les décomptes établis par Y._ et a informé cette dernière qu'elle était toujours dans l'attente d'un planning des entretiens préventifs, lesquels n'avaient jamais eu lieu. Il est par ailleurs établi que les interventions à la suite de pannes du système ne respectaient pas les délais prévus à l'art. 6 du contrat. Le 10 mars 1999, Y._ a indiqué à X._ que le genre d'équipement concerné ne se prêtait pas à une maintenance à intervalles fixes; elle annonçait en outre qu'elle enverrait un décompte du solde échu pour paiement dans les dix jours, faute de quoi elle serait contrainte de cesser les prochaines livraisons.
Par courrier du 21 avril 1999, Y._ a déclaré résilier le contrat de maintenance et son annexe pour le 31 juillet 1999. Elle n'a depuis lors plus livré de matériel à X._ et n'est plus intervenue dans les locaux de celle-ci. De son côté, X._ n'a plus demandé à Y._ de procéder à des interventions sur son équipement et elle s'est fournie en produits et consommables auprès d'une entreprise tierce, pour un prix supérieur à celui pratiqué par Y._.
Le 6 août 1999, Y._ a envoyé à X._ un troisième rappel visant le règlement de la somme totale de 57'769 fr. 85 dans un délai de dix jours; cette somme comprenait notamment les mensualités dues jusqu'au 31 juillet 1999. Le 10 septembre suivant, X._ a formé opposition au commandement de payer cette somme.
Le 6 août 1999, Y._ a envoyé à X._ un troisième rappel visant le règlement de la somme totale de 57'769 fr. 85 dans un délai de dix jours; cette somme comprenait notamment les mensualités dues jusqu'au 31 juillet 1999. Le 10 septembre suivant, X._ a formé opposition au commandement de payer cette somme.
B. Le 26 octobre 1999, Y._ a assigné X._ en paiement de 57'769 fr. 85 avec intérêts à 5% l'an dès le 17 août 1999 et a requis la mainlevée de l'opposition précitée. La défenderesse a conclu au déboutement de la demanderesse.
Par jugement du 15 novembre 2004, la Cour civile du Tribunal cantonal vaudois a condamné X._ à verser à Y._ la somme de 51'198 fr. avec intérêts à 5% l'an dès le 20 août 1999; elle a prononcé à due concurrence la mainlevée de l'opposition susmentionnée. En substance, la cour cantonale a retenu que la défenderesse devait s'acquitter des mensualités de maintenance jusqu'à la fin du délai de résiliation et payer diverses factures encore ouvertes, le tout à hauteur de 51'198 fr. selon ce qu'avait établi l'expert judiciaire.
Par jugement du 15 novembre 2004, la Cour civile du Tribunal cantonal vaudois a condamné X._ à verser à Y._ la somme de 51'198 fr. avec intérêts à 5% l'an dès le 20 août 1999; elle a prononcé à due concurrence la mainlevée de l'opposition susmentionnée. En substance, la cour cantonale a retenu que la défenderesse devait s'acquitter des mensualités de maintenance jusqu'à la fin du délai de résiliation et payer diverses factures encore ouvertes, le tout à hauteur de 51'198 fr. selon ce qu'avait établi l'expert judiciaire.
C. La défenderesse interjette un recours en réforme au Tribunal fédéral. Elle conclut à la réforme du jugement cantonal en ce sens qu'elle ne doit verser à la demanderesse que 3'387 fr. 80 avec intérêts à 5% l'an dès le 20 août 1999, l'opposition frappant le commandement de payer devant être levée à concurrence de ce montant.
La demanderesse propose le rejet du recours.
Le Tribunal fédéral considère en droit:
Le Tribunal fédéral considère en droit:
1. 1.1 Interjeté par la partie défenderesse qui a succombé dans ses conclusions libératoires et dirigé contre un jugement final rendu en dernière instance cantonale par un tribunal supérieur (art. 48 al. 1 OJ) sur une contestation civile dont la valeur litigieuse atteint le seuil de 8'000 fr. (art. 46 OJ), le recours en réforme est en principe recevable, puisqu'il a été déposé en temps utile (art. 54 al. 1 OJ) dans les formes requises (art. 55 OJ).
1.2 Le recours en réforme est ouvert pour violation du droit fédéral, mais non pour violation directe d'un droit de rang constitutionnel (art. 43 al. 1 OJ) ou pour violation du droit cantonal (art. 55 al. 1 let. c in fine OJ ; ATF 127 111 248 consid. 2c). L'acte de recours doit contenir les motifs à l'appui des conclusions; ils doivent indiquer succinctement quelles sont les règles de droit fédéral violées par la décision attaquée et en quoi consiste cette violation (art. 55 al. 1 let. c OJ).
Saisi d'un recours en réforme, le Tribunal fédéral doit conduire son raisonnement juridique sur la base des faits contenus dans la décision attaquée, à moins que des dispositions fédérales en matière de preuve n'aient été violées, qu'il y ait lieu à rectification de constatations reposant sur une inadvertance manifeste (art. 63 al. 2 OJ) ou qu'il faille compléter les constatations de l'autorité cantonale parce que celle-ci n'a pas tenu compte de faits pertinents et régulièrement allégués (art. 64 OJ; ATF 130 III 102 consid. 2.2). Dans la mesure où un recourant présente un état de fait qui s'écarte de celui contenu dans la décision attaquée sans se prévaloir avec précision de l'une des exceptions qui viennent d'être rappelées, il n'est pas possible d'en tenir compte. L'appréciation des preuves à laquelle s'est livrée l'autorité cantonale ne peut être remise en cause (ATF 130 III 136 consid. 1.4). II ne peut être présenté de griefs contre les constatations de fait, ni de faits ou de moyens de preuve nouveaux (art. 55 al. 1 let. c OJ).
1.3 Le Tribunal fédéral ne peut aller au-delà des conclusions des parties, mais il n'est pas lié par les motifs qu'elles invoquent (art. 63 al. 1 OJ), ni par l'argumentation juridique retenue par la cour cantonale (art. 63 al. 3 OJ). Le Tribunal fédéral peut ainsi rejeter un recours, tout en adoptant une autre argumentation juridique que celle retenue par la cour cantonale (ATF 130 111 297 consid. 3.1).
1.3 Le Tribunal fédéral ne peut aller au-delà des conclusions des parties, mais il n'est pas lié par les motifs qu'elles invoquent (art. 63 al. 1 OJ), ni par l'argumentation juridique retenue par la cour cantonale (art. 63 al. 3 OJ). Le Tribunal fédéral peut ainsi rejeter un recours, tout en adoptant une autre argumentation juridique que celle retenue par la cour cantonale (ATF 130 111 297 consid. 3.1).
2. Pour s'opposer à la demande en paiement, la recourante invoque la compensation à concurrence de 48'600 fr. 20 (51'988 fr. - 3'387 fr. 80). A la suivre, elle ne devait pas les mensualités prévues pour les mois de mars à juillet 1999 (18'866 fr. 25); elle pouvait faire valoir un dommage à titre de surcoût pour avoir dû s'approvisionner en consommables auprès d'une entreprise tierce pratiquant des prix plus élevés que l'intimée (7'305 fr. 05); enfin, elle pouvait invoquer un dommage futur en raison de l'inexécution du contrat de maintenance (22'428 fr. 90).
2. Pour s'opposer à la demande en paiement, la recourante invoque la compensation à concurrence de 48'600 fr. 20 (51'988 fr. - 3'387 fr. 80). A la suivre, elle ne devait pas les mensualités prévues pour les mois de mars à juillet 1999 (18'866 fr. 25); elle pouvait faire valoir un dommage à titre de surcoût pour avoir dû s'approvisionner en consommables auprès d'une entreprise tierce pratiquant des prix plus élevés que l'intimée (7'305 fr. 05); enfin, elle pouvait invoquer un dommage futur en raison de l'inexécution du contrat de maintenance (22'428 fr. 90).
3. La recourante reproche d'abord à la cour cantonale d'avoir mal interprété les contrats de maintenance des 28 juillet et 4 août 1997. Selon elle, ceux-ci lui faisaient obligation de s'approvisionner auprès de l'intimée et - par voie de conséquence - imposaient à cette dernière de lui vendre ses produits. A la suivre, l'objet de ces contrats concernait donc à la fois l'entretien et la vente du matériel prévu à l'art. 2B.
La cour cantonale est d'avis que les contrats de maintenance imposaient uniquement à la recourante l'obligation d'utiliser du matériel compatible avec l'équipement utilisé. La lettre du contrat ne dit pas autre chose puisqu'il y est question uniquement de produits conformes «aux normes fournies» par l'intimée. Ainsi, le texte du contrat n'ajoute aucune obligation supplémentaire aux parties. II ressort de ce qui précède que la cour cantonale a procédé à une interprétation objective correcte de la clause contractuelle précitée.
Par conséquent, la décision de l'intimée de cesser de livrer ses produits à la recourante ne constitue pas une inexécution du contrat de maintenance et la recourante ne saurait en déduire un droit à des dommages-intérêts à titre de surcoûts pour s'être fournie auprès d'une entreprise tierce (7'305 fr. 05).
Par conséquent, la décision de l'intimée de cesser de livrer ses produits à la recourante ne constitue pas une inexécution du contrat de maintenance et la recourante ne saurait en déduire un droit à des dommages-intérêts à titre de surcoûts pour s'être fournie auprès d'une entreprise tierce (7'305 fr. 05).
4. S'agissant du paiement des mensualités de mars à juillet 1999, la recourante soutient que les règles sur la demeure du débiteur (art. 102 et 100 [recte] 108 CO) lui permettaient de se départir du contrat et que, par ailleurs, elle a régulièrement invoqué l'exception non adimpleti contractus (art. 82 CO); enfin, elle évoque la possibilité d'avoir mis un terme à la relation contractuelle avec effet immédiat par actes concluants.
Les deux dernières de ces assertions, en tant qu'elles s'appuient sur des faits qui n'ont pas été retenus par l'autorité cantonale, sont irrecevables (cf. art. 55 al. 1 let. c OJ et ATF 123 III 16 consid. 2b en ce qui concerne l'art. 82 CO). Quant à la première, elle se fonde sur une prétendue violation de l'art. 108 ch. 1 CO. A teneur de cette disposition, la fixation d'un délai - que ce soit pour mettre le débiteur en demeure (art. 102 al. 1 et ATF 97 II 58 consid. 5) ou pour résilier le contrat (art. 107 al. 1 CO) - n'est pas nécessaire lorsqu'il ressort de l'attitude du débiteur que cette mesure serait sans effet. Le but de l'art. 108 ch. 1 CO est d'éviter au créancier de faire de la fixation d'un délai une formalité parfaitement inutile (Luc Thévenoz, Commentaire romand, n. 4 ad art. 108 CO). Tel est notamment le cas lorsque le débiteur annonce de manière claire et définitive qu'il ne peut ou ne veut pas s'exécuter (ATF 110 Il 141 consid. 1b).
Pour les motifs évoqués ci-dessus (cf. consid. 3), la décision de l'intimée de ne pas conclure à l'avenir de nouveaux contrats de vente avec la recourante ne peut être mise en relation avec un éventuel refus d'exécuter les contrats de maintenance. Pour fonder l'application de l'art. 108 ch. 1 CO, la recourante invoque la lettre de l'intimée du 10 mars 1999 selon laquelle le genre d'équipement concerné ne se prêtait pas à une maintenance à intervalles réguliers. Il n'a pas été constaté que cette assertion était infondée. De plus, elle n'impliquait pas nécessairement un refus clair et définitif d'exécuter une prestation d'entretien; d'ailleurs, elle ne concernait qu'une des obligations assumées par l'intimée. Or, le contrat imposait également à celle-ci de prendre en charge tous les frais pour l'entretien de l'équipement (art. 1) et d'intervenir sur demande du client à la suite de pannes (art. 6).
La recourante ne prétend pas que l'intimée aurait annoncé d'emblée qu'elle refuserait d'exécuter ces prestations-là. Dès lors, la cour cantonale - qui a constaté que la recourante n'avait pas sollicité d'intervention après le 21 avril 1999 - n'a pas violé le droit fédéral en écartant dans le cas d'espèce les règles sur la demeure du débiteur.
II découle de ce qui précède que la recourante était tenue de s'acquitter des mensualités convenues jusqu'à l'échéance du délai de résiliation contractuel (18'866 fr. 25), comme l'a justement admis la cour cantonale.
5. La recourante fait enfin grief à la cour cantonale d'avoir mal appliqué l'art. 97 al. 1 CO: elle lui reproche en particulier d'avoir - à tort - écarté l'application de l'art. 42 al. 2 CO au motif qu'elle n'aurait pas allégué les faits permettant d'estimer le dommage.
5.1 La fixation du dommage ressortit en principe au juge du fait. Saisi d'un recours en réforme, le Tribunal fédéral n'intervient que si l'autorité cantonale a méconnu la notion juridique du dommage ou si elle a violé des principes juridiques relatifs au calcul du préjudice. L'estimation du dommage d'après l'art. 42 al. 2 CO repose sur le pouvoir d'apprécier les faits; elle relève donc de la constatation des faits, laquelle ne peut être revue en instance de réforme. Certes, ressortit au droit le point de savoir quel degré de vraisemblance la survenance du dommage doit atteindre pour justifier l'application de l'art. 42 al. 2 CO et si les faits allégués, en la forme prescrite et en temps utile, permettent de statuer sur la prétention en dommages-intérêts litigieuse. Il n'en demeure pas moins que, dans la mesure où l'autorité cantonale, sur la base d'une appréciation des preuves et des circonstances concrètes, a admis ou nié que la vraisemblance de la survenance du préjudice confinait à la certitude, elle a posé une constatation de fait qui est soustraite au contrôle de la juridiction fédérale de réforme (ATF 126 111 388 consid. 8a).
Si l'art. 42 al. 2 CO permet d'alléger le fardeau de la preuve, il ne conduit en aucun cas à supprimer ce fardeau et encore moins à pallier les éventuelles carences de plaideurs négligents (arrêt 4C.412/2004 du 23 février 2005, consid. 3.2.1, publié à la SJ 2005 I 329 ; ATF 122 111 219 consid. 3a). De surcroît, en tant qu'elle consacre, pour celui qui réclame des dommages-intérêts, une exception au principe du fardeau plein et entier de la preuve (art. 8 CC et 42 al. 1 CO), la disposition doit s'interpréter de manière restrictive (Roland Brehm, Commentaire bernois, n. 50 ad art. 42 CO; Henri Deschenaux/Pierre Tercier, La responsabilité civile, p. 210 n. 23). Dans ce contexte, il appartient à la partie demanderesse d'alléguer avec précision - et au besoin de prouver - tous les éléments de fait nécessaires pour mettre en oeuvre les critères d'appréciation de l'art. 42 al. 2 CO. La jurisprudence a eu l'occasion de rappeler que ce devoir existe quand bien même le plaideur aurait une certaine difficulté à démontrer ces faits (arrêt 4C.110/2002 du 25 juin 2002, consid. 3.3; arrêt 4C.160/2001 du 18 décembre 2001, consid. 2d/cc).
5.2 Dans son analyse du dommage invoqué par la recourante, la cour cantonale a posé que l'intimée, en ne procédant pas à un contrôle des installations quatre fois par an comme le lui imposait le contrat, avait violé fautivement ses obligations contractuelles; il en allait de même des interventions en cas de pannes, lesquelles étaient tardives au regard des engagements contractuels. Suivant en cela l'avis de l'expert judiciaire, les juges cantonaux ont ensuite constaté qu'un tel défaut de maintenance normale ne provoquait pas des pannes d'installation, mais des travaux défectueux ou tardifs, et ils ont ajouté qu'un entretien régulier avait pour but d'éviter une dégradation progressive des composants.
En conclusion, la cour cantonale a retenu que si l'existence de problèmes dus à un défaut de maintenance était établie, la recourante n'alléguait ni ne démontrait la nature et l'ampleur de ceux-ci: en particulier, elle ne se prévalait pas de rabais ou de ristournes qu'elle aurait dû consentir à des clients qui se seraient plaints d'une qualité de ses produits inférieure à celle convenue; elle n'invoquait pas non plus une baisse de son chiffre d'affaires qui aurait pu être mise en relation avec des problèmes de qualité ou des retards de livraison. Cette analyse, en tous points conforme à la jurisprudence fédérale en matière de fardeau de l'allégation relatif à l'art. 42 al. 2 CO, ne souffre d'aucune critique. On ne peut pas non plus faire grief aux juges cantonaux, dans le cadre de cette disposition, d'avoir considéré comme inadéquat d'évaluer le dommage en fonction d'un certain nombre de mensualités de maintenance (en l'espèce six, correspondant à 22'428 fr. 90); une telle analyse aurait à la rigueur pu entrer en considération si la recourante avait régulièrement exercé l'action minutoire, ce qu'elle n'a pas fait (cf. art. 368 al. 2, 1ère hypothèse, CO et ATF 130 111 458 consid. 4).
5.3 En définitive, dans la mesure où la cour cantonale a nié l'existence d'un dommage en fondant son raisonnement sur des faits - respectivement sur l'absence de faits que la recourante aurait pu alléguer -, la voie du recours en réforme était fermée. Les griefs soulevés par la recourante, qui s'apparentent d'ailleurs plus à des pétitions de principe qu'à de véritables critiques fondées sur d'éventuelles violations du droit fédéral, apparaissent ainsi irrecevables.
5.3 En définitive, dans la mesure où la cour cantonale a nié l'existence d'un dommage en fondant son raisonnement sur des faits - respectivement sur l'absence de faits que la recourante aurait pu alléguer -, la voie du recours en réforme était fermée. Les griefs soulevés par la recourante, qui s'apparentent d'ailleurs plus à des pétitions de principe qu'à de véritables critiques fondées sur d'éventuelles violations du droit fédéral, apparaissent ainsi irrecevables.
6. Compte tenu de l'issue de la cause, la recourante supportera l'émolument de justice et versera des dépens à l'intimée (art. 156 al. 1 et 159 al. 1 OJ).
Par ces motifs, le Tribunal fédéral prononce:
Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté, dans la mesure où il est recevable.
1. Le recours est rejeté, dans la mesure où il est recevable.
2. Un émolument judiciaire de 2'500 fr. est mis à la charge de la recourante.
2. Un émolument judiciaire de 2'500 fr. est mis à la charge de la recourante.
3. La recourante versera à l'intimée une indemnité de 3'000 fr. à titre de dépens.
3. La recourante versera à l'intimée une indemnité de 3'000 fr. à titre de dépens.
4. Le présent arrêt est communiqué en copie aux mandataires des parties et à la Cour civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 16 juin 2005
Au nom de la Ire Cour civile
du Tribunal fédéral suisse
Le président: Le greffier: